【发布时间】:2015-10-01 11:59:06
【问题描述】:
我已经被这个问题困扰了一段时间,并且已经完成了几个教程但没有成功。
如何在 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");
我的最终目标是使用变量来传递值,而不仅仅是语句的字符串文本,如果这样做更容易的话。
【问题讨论】:
-
对象标识符不能作为参数
-
另一个需要注意的常见“陷阱”是 ODP.NET 默认为“按位置绑定”,这意味着它不关心您为参数使用的名称,它只关心您的顺序“添加”它们。如果你想要 bindbyname 代替,有一个属性。