首页 > 解决方案 > 使用 cmd.parameter c# 创建动态查询

问题描述

我知道有很多与创建动态查询相关的问题,但没有人能帮助我。我试图在循环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();
        }
    }

标签: c#sqlasp.netstored-proceduresdynamicquery

解决方案


这里的问题主要是时间问题之一。当它是一个空字符串时,您当前在 start 处values连接到字符串。一旦你完成了:就是这样- 这就是你创建的 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


推荐阅读