如何在sqlParam中传递参数

时间:2018-11-22 12:43:54

标签: c# sql

如何将参数传递给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看不到此参数。 如何正确制作!

2 个答案:

答案 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相同?