c# - 使用 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();
}
}
解决方案
这里的问题主要是时间问题之一。当它是一个空字符串时,您当前在 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
。
推荐阅读
- python - 如何在 pandas 中查找单词?还是两个词的组合?
- intellij-idea - IntelliJ 自动格式化 Ctrl+Alt+L 符号问题
- c# - 如何用获得的像素颜色绘制面板?
- continuous-integration - 如何在gitlab中使用不同图像的作业之间共享环境变量?
- c++ - ZMQ:当没有订阅者时,消息是否在扩展的 pub-sub 中发布?
- sublimetext3 - 如何使用 Julia 在 sublime 文本上添加横幅评论
- r - 将 .SD 与重命名的变量与 .SD 列的名称相结合
- filter - Neo4j:基于属性列表进行过滤的 Cypher
- python - 如何从字母字符串中制作字母列表
- django - 如何在 Django 中的特定应用程序中启用调试