我有我們在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