使用cmd.parameter c#创建动态查询

时间:2018-09-04 11:03:58

标签: c# sql asp.net stored-procedures dynamicquery

我知道有许多与创建动态查询有关的问题,但是没有人可以帮助我。 我正在尝试借助cmd.Parameters.AddWithValue循环创建动态foreach,但是找不到在foeach中传递的所有值。我知道我在写 var values =“” ,这就是值给我的null

我提供的代码可以帮助您解决错误

  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();
        }
    }

2 个答案:

答案 0 :(得分:8)

这里的问题主要是时机之一。当前,您正在将values连接到字符串刚开始时为<< / em>,这是一个空字符串。完成此操作后:就这样-这就是您创建的SQL:

insert into Foo values()

这将无济于事。我要么将该连接推迟到循环后

foreach (var item in ControlName.Controls)
{
    if (item is TextBox)
    {
        cmd.Parameters.AddWithValue("@" + ((TextBox)item).ID, ((TextBox)item).Text);
        values += "@" + ((TextBox)item).ID + ",";
    }
}
cmd.CommandText = "insert into "+ TableName +" values(" + values + ")";

或者我会在整个过程中使用StringBuilder

var sql = new StringBuilder("insert into [").Append(TableName)
              .Append("] values(");
foreach (var item in ControlName.Controls)
{
    if (item is TextBox)
    {
        cmd.Parameters.AddWithValue("@" + ((TextBox)item).ID, ((TextBox)item).Text);
        sql.Append("@").Append(((TextBox)item).ID).Append(",");
    }
}
cmd.CommandText = sql.Append(")").ToString();

另请注意:这是CommandType.CommandText,而不是CommandType.StoredProcedure

答案 1 :(得分:-1)

请尝试输入密码。

<input  name="start" id="datepicker1" type="text" value="<?php echo(set_value('start') ? set_value('start') : date("y-m-d")); ?>"  class="form-control">
<input  name="end" id="datepicker2" type="text" value="<?php echo set_value('end'); ?>"  class="form-control">

  $(function() {
    $( "#datepicker1" ).datepicker();
    $( "#datepicker2" ).datepicker();
  });