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