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

Min*_*tel 0 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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 8

这里的问题主要是时间问题.您当前正在连接values正确的字符串,当它是一个空字符串时.一旦你完成了:就是这样 - 那就是你创建的SQL:

insert into Foo values()
Run Code Online (Sandbox Code Playgroud)

这没有帮助.我要么推迟该级联,直到之后的循环:

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 + ")";
Run Code Online (Sandbox Code Playgroud)

或者我会用到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();
Run Code Online (Sandbox Code Playgroud)

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