我有我们在ADO.NET中编写的C#应用程序。我一直在使用IDbCommand
和IDbConnection
接口来创建交叉数据库代码。 (到Firebird,SQLite,SQL Server 2005和2008,Access 2007,以及Access 2010和Oracle 11g),这一切都奏效了。参数分隔符
问题我有,我现在有一个我需要支持的Oracle 10g数据库。
所有“正常”的东西,创建连接,并命令工作正常,但是,当我去使用接口IDataParameter
和cmd.CreateParamater()
万兆无法创建一个参数,因为在查询参数语法(我使用参数化查询)。
显然,Oracle 10g开箱即用,不支持使用@
标志。 Oracle 11g,SQL Server以及其他所有提到的功能。
例如,下面的查询将在10g中失败:
select * from Products where ProductId = @ProductId
但是,如果我用冒号,它成功就好,使用上述ado.net接口,所以这个查询会成功:
select * from Products where ProductId = :ProductId
不幸的是,冒号在大多数其他数据库实现中不起作用。
或者是否有一个选项可以在Oracle 10g数据库中翻转,允许使用@
分隔符代替参数的:
分隔符。
目前的解决方案我已经是不太理想,我有顾客/客户端初始化属性ParameterDelimiter
(我默认为@
号),并使用string.Format
,插入ParameterDelimiter
。
是否有任何标准的方法来做到这一点,我错过了,没有客户必须传递一个分隔符,或者没有我的基础库知道数据库实现? (例如,包括ODP.NET和检查针对OracleConnection
)
这是你在应用程序中嵌入的SQL文本吗?(“select * from ...” – 2011-12-17 15:42:43
是的,我正在使用参数化查询,我正在生成参数,并用它们传入的值替换它们。 – 2011-12-17 15:49:17
您可能需要检查连接的类型,如果你要抽象数据库类,我会建议创建一个查询生成类,通过一个抽象类来访问,就像你在创建IDbConnection时创建的一个接口一样...... – 2011-12-17 15:55:19