我一直坚持这个问题并且已经完成了几个教程而没有成功。
如何在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");
我的最终目标是使用变量来传递值而不仅仅是语句的字符串文本,如果这样做更容易。
答案 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");