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)
这里的问题主要是时间问题.您当前正在连接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.
| 归档时间: |
|
| 查看次数: |
831 次 |
| 最近记录: |