我有我们一直在 ADO.NET 中编码的 C# 应用程序。我一直在使用IDbCommand
, 和IDbConnection
接口来创建跨数据库代码。
到目前为止,这一切都运行良好(跨 Firebird、SQLite、SQL Server 2005 和 2008、Access 2007 和 Access 2010 以及 Oracle 11g)。
我的问题是,我现在有一个需要支持的 Oracle 10g 数据库吗?
所有“正常”的东西,创建连接和命令都可以正常工作,但是,当我使用接口创建参数IDataParameter
并cmd.CreateParamater()
在 10g 上失败时,由于查询中的参数语法(我正在使用参数化查询)。
显然,开箱即用的 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
)