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

create a dynamic query using cmd.parameter c#

我知道有很多与创建动态查询相关的问题,但没有人能帮助我。 我试图在 foreach 循环的帮助下创建一个动态 cmd.Parameters.AddWithValue,但我找不到我在 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();
        }
    }

这里的问题主要是时间问题。您当前正在将 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

请尝试此代码。

  public void Insert_Data_generic(DataSet dsins)
  {
        SqlConnection con = new SqlConnection(connectionstring);
        string Result = "insert into TableName (";
        SqlCommand cmd = new SqlCommand();    
        con.Open();
        string columns = string.Join(",", dsins.Tables[0].Columns.Cast<DataColumn>().Select(c => c.ColumnName));
        string values = string.Join(",", dsins.Tables[0].Columns.Cast<DataColumn>().Select(c => string.Format("@{0}", c.ColumnName)));

        Result += columns + ") values(" + values + ")";
        foreach (DataRow row in dsins.Tables[0].Rows)
        {
            cmd = new SqlCommand(Result, con);
            cmd.Parameters.Clear();
            foreach (DataColumn col in dsins.Tables[0].Columns)
            {
                cmd.Parameters.AddWithValue("@" + col.ColumnName, row[col]);

            }
            cmd.ExecuteNonQuery();
        }
     }