如何创建参数化查询?

时间:2015-10-01 11:59:06

标签: c# sql oracle odp.net

我一直坚持这个问题并且已经完成了几个教程而没有成功。

如何在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");

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

1 个答案:

答案 0 :(得分:4)

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

其次,您无法使用参数提供表名或字段名。它应该是硬编码的,或者使用动态SQL编写。

第三,你不应该逃避参数。他们不需要那样。

现在最好的事情是:

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

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