如何创建参数化查询?

How to create a parameterized query?

我被这个问题困扰了一段时间,并且已经完成了几个教程都没有成功。

如何在 C# 中使用参数化查询 Oracle.ManagedDataAccess.dll 而不是旧的 Oracle.DataAccess.dll

我试过的代码是:

string query = @"SELECT Count(*) FROM @table WHERE @custNM = '@nm'";

OracleCommand mySearch = new OracleCommand(query, newConn);
mySearch.Prepare();

mySearch.Parameters.Add("@table", "cust");
mySearch.Parameters.Add("@custNM", "nm");
mySearch.Parameters.Add("@nm", "SAM");

我也试过没有 mySearch.Prepare 部分和机智 : 而不是 @ 并且没有 @ 作为查询字符串的前缀。我尝试的另一件事是删除 Add 字符串开头的 @/:,例如

mySearch.Parameters.Add("nm", "SAM");

我的最终目标是使用变量来传递值,而不仅仅是语句的字符串文本,如果这样做更容易的话。

首先,您应该使用:作为参数标识符,而不是@,这是SQL服务器常用的。

其次,您不能使用参数提供 table 名称或字段名称。它应该是硬编码的或使用动态 SQL.

编写的

第三,你不应该转义参数。他们不需要那个。

现在最好的办法是:

string query = @"SELECT Count(*) FROM cust WHERE nm = :nm";

OracleCommand mySearch = new OracleCommand(query, newConn);
mySearch.Parameters.Add(":nm", "SAM");