如何将参数传递给sqlParam
_id=23
SqlClient.Main.CreateCommand("select X from TAB where ID= @id", new SqlParam("id", K_{0}), _id)).ExecScalar<int>();
我有一个需要在SqlParam中传递的变量。参数id="K_23"
或"K_3131"
。现在sql看不到此参数。
如何正确制作!
答案 0 :(得分:1)
该模式通常如下运行:
SqlCommand cmd = new SqlCommand("SELECT * FROM table WHERE column = @val", conn);
cmd.Parameters.AddWithValue("@val", 123);
cmd.Parameters.Add(new...);
但是请阅读以下内容:
SqlCommand Parameters Add vs. AddWithValue
尤其是这些,如果您正在考虑大量使用AddWithValue:
https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/
http://www.dbdelta.com/addwithvalue-is-evil/
实际上,在大多数情况下,对于简单的东西,您根本不应该再真正编写像这样的代码*-有很多很好的数据访问库/方法(EF,nHibernate,Dapper,DataTables)意味着将SQL-inside-strings附加到事件处理程序等中只是不必要的,并且是原始的/无用的。没有人会花时间在屏幕上的原始行中编写代码来表示按钮。他们只是将一个Button添加到页面/表单。也不用对数据库进行低级设置。使用数据访问框架
* select blah from blah where blah
无疑是简单的东西。每个人都应该将这类查询移交给ORM库,而我完全感到震惊的是,对于这种级别的查询复杂性,仍然教导/提倡使用SqlCommand/DataReader
等
答案 1 :(得分:0)
根据您对我的评论的回答,我认为您正在寻找这个:
private int _id = 23
// ...
var idParam = new SqlParam("id", string.Format("K_{0}", _id))
SqlClient.Main.CreateCommand("... where ID=@id", idParam).ExecScalar<int>();
string.Format("K_{0}", _id)
创建字符串“ K_23”。较新的C#版本的另一种方式是$"K_{_id}"
。
new SqlParam("id", "K_23")
创建一个值为“ K_23”的字符串参数。
您的命令然后按ID='K_23'
进行过滤。
这是您要达到的目标吗?还是K_23是数据库中的一个字段,并且您想检查字段ID是否与字段K_23相同?