2012-06-14 79 views
0

我的問題與此問題非常相似 - Addin parameter for Oracle除了我使用的是Oracle 11g。數據庫有VARCHAR(Western European)NVARCHAR(Unicode)數據類型的兩個不同字符。企業庫dbcommand用於Oracle的AddInParameter方法

db.AddInParameter(cmd, "nationalColumn", DbType.String, "高野") 

數據庫中的國家字符集是unicode,因此NVARCHAR列可以容納這些字符。

我的問題是我如何告訴db.AddInParameter函數,我添加的參數是一個NVARCHAR,而不是它默認情況下假設的VARCHAR。

添加到這一點 - 我使用System.Data.OracleClient的連接到數據庫

回答

0

我回答我自己的問題,因爲我花了一個星期的時間搞清楚了。 System.Data命名空間不理解它正在處理的列是國家列,除非它明確指定爲OracleType.Nvarchar。

爲了解決上述情況,我不得不重寫AddInParameter函數來添加一個switch case來檢查輸入的DBType是否是一個String並將其映射到一個OracleType.NVarchar。

HTH

1

你不能編碼在西歐編碼字符中國。此編碼具有有限數量的字符定義,並且不包含中文。

您期望輸出什麼?我期望或者數據被亂碼或者返回一個錯誤。

+0

數據庫中的國家字符集是unicode,因此NVARCHAR列可以容納這些字符。我的問題是我如何告訴db.AddInParameter函數,我要添加的參數是一個NVARCHAR列,而不是它默認假設的VARCHAR列 – maverick

+0

這是一個完全不同的問題,而不是你問的問題。我不知道答案。我想你需要問一個新問題。 – usr

+0

對不起,如果我沒有正確溝通。我會進行編輯。 – maverick

0

您是自己指定參數還是讓Enterprise Library嘗試找出參數類型? 如果要調用

command.AddInParameter(「parameterName」, value); 

嘗試調用的程序,讓企業庫找出參數,像這樣的例子:

DB.ExecuteNonQuery(「PKG_USER.DELETE」, userId); 

的過程需要一個INT參數調用P_ID,但該命令只能傳遞在參數值中。 EntLib使用參數順序發送它們。

而且看看

+0

感謝你。這種方法會自動選取DbType.String作爲數據類型。所以沒有解決問題。很顯然,如果主字符集不同,System.Data命名空間隱式不支持National字符集。如果涉及NVARCHAR列,我必須放入使用OracleType的case語句 – maverick