我知道有许多与创建动态查询有关的问题,但是没有人可以帮助我。
我正在尝试借助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();
}
}
答案 0 :(得分:8)
这里的问题主要是时机之一。当前,您正在将values
连接到字符串刚开始时为<< / em>,这是一个空字符串。完成此操作后:就这样-这就是您创建的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
。
答案 1 :(得分:-1)
请尝试输入密码。
<input name="start" id="datepicker1" type="text" value="<?php echo(set_value('start') ? set_value('start') : date("y-m-d")); ?>" class="form-control">
<input name="end" id="datepicker2" type="text" value="<?php echo set_value('end'); ?>" class="form-control">
$(function() {
$( "#datepicker1" ).datepicker();
$( "#datepicker2" ).datepicker();
});