【发布时间】:2019-02-09 09:40:45
【问题描述】:
我知道有很多与创建动态查询相关的问题,但没有人能帮助我。
我试图在foreach 循环的帮助下创建一个动态cmd.Parameters.AddWithValue,但我找不到我在foeach 中传递的所有值。我知道我在写 var values = " " 这就是值给我null value 的方式
我提供的代码可以帮助您解决错误
public void insert_Para(System.Web.UI.HtmlControls.HtmlGenericControl ControlName, String TableName)
{
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["con"].ToString()))
{
var values = "";
SqlCommand cmd = new SqlCommand("insert into "+ TableName +" values(" + values + ")", con);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
foreach (var item in ControlName.Controls)
{
if (item is TextBox)
{
cmd.Parameters.AddWithValue("@" + ((TextBox)item).ID, ((TextBox)item).Text);
values += "@" + ((TextBox)item).ID + ",";
}
}
if (con.State == ConnectionState.Closed)
con.Open();
cmd.ExecuteNonQuery();
}
}
【问题讨论】:
-
问题是创建插入语句的字符串已经设置好了。如果您更改
values您将不会更改 SqlCommand 中的字符串 -
@MarcGravell 查询本身只是一个
INSERT INTO SomeTable VALUES(),没有任何参数或值。条件块添加参数而不实际更改查询。 -
这段代码既不是动态的,也没有使用任何参数。
values在构造查询时为空,这意味着 SqlCommand 对象尝试对某个表执行无效查询。 -
@PanagiotisKanavos 显然 打算 被参数化,这与我回复的评论相反;它不工作的事实不应该让我们感到惊讶 - 如果代码按预期工作,我们很少在这里看到关于此的问题:)
-
附带说明:如果这是您创建 SQL 的方式,您将非常容易受到控件顺序的影响 - 现在假设控制顺序与列顺序完全匹配
标签: c# sql asp.net stored-procedures dynamicquery