【问题标题】:How to create a parameterized query?如何创建参数化查询?
【发布时间】: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 代替,有一个属性。

标签: c# sql oracle odp.net


【解决方案1】:

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

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

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

现在最好的办法是:

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

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

【讨论】:

  • 关于你的第一句话,: 只是“Oracle 方式”,还是有实际区别?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-28
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多