2014-06-19 39 views
5

我使用Oracle 12c的一個WinForms C#應用程序通過oracle.manageddataaccess(通過NHibernate的4.0),Oracle數據庫是在客戶現場,我們已經與字符集轉換由於發生問題,另一臺機器上Oracle數據庫和客戶機之間的NLS_LANG差異。客戶機上沒有安裝Oracle客戶機(僅使用託管驅動程序)。NLS_LANG設置爲Oracle託管數據訪問

我們發現您可以使用環境變量指定客戶端NLS_LANG。

我的問題是: 在Oracle中使用新的託管數據訪問時,是否有其他方法可以指定NLS_LANG設置?

回答

0

不知道究竟你需要什麼,(其中,「甲骨文新的託管數據訪問」在這裏不按門鈴。),但我發現這一點:

http://docs.oracle.com/html/E41125_02/featGlobal.htm#i1008314

調用Oracle.DataAccess.Client.OracleConnection的方法GetSessionInfo()返回Oracle.DataAccess.Client.OracleGlobalization類的一個對象,根據ODP.NET開發指南,可被用來改變在Oracle數據庫會話的水平特定NLS-設置。

3

我正在使用OracleGlobalization設置日期格式,如下所示。這可能會給你一個線索..

conn = new OracleConnection(connectionString); 
     conn.Open(); 
     OracleGlobalization info = conn.GetSessionInfo(); 
     info.DateFormat = "YYYY-MM-DD"; 
     conn.SetSessionInfo(info); 
1

你可能想看看NLS_LANG鍵的Windows註冊表。設置密鑰或多或少等同於設置環境變量,但如果兩者都存在,則環境變量優先。 這個StackOverflow的問題是有點與此相關的問題:

Effects of changing NLS_LANG setting in the registry for Oracle Client

在我今天安裝會話中,我們發現,我們的Web應用程序在32位模式下在64位操作系統上運行,所以正在使用的註冊表位置與標準位置不同。這是在HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ ORACLE \ KEY_OraClient11g_home1。我會建議使用註冊表編輯器來找出是NLS_LANG鍵是做一個全局搜索。

+0

ODP.NET,管理驅動程序不會從註冊表考慮'NLS_LANG'。實際上它根本不考慮註冊表設置。 –

2

當您從遷移到非託管託管ODP的問題提出。 這裏有方法,通過它的部分設置NLS_LANG到打開的OracleConnection

我使用NHibernate
 string nlsLang = Settings.Default.NLS_LANG; 
     var arr = nlsLang.Split('_'); 
     string language = arr[0]; 
     arr = arr[1].Split('.'); 
     string territory = arr[0]; 
     string characterSet = arr[1]; 

     OracleGlobalization info = connection.GetSessionInfo(); 
     info.Language = language; 
     info.Territory = territory; 
     info.NumericCharacters = characterSet; 
     connection.SetSessionInfo(info); 
0

,但你也許可以用任何你正在使用運行此。

ALTER session SET nls_language = 'AMERICAN' 

我在打開數據庫連接後立即執行它。

一旦完成,運行這返回'美國'。

select USERENV('LANG') from dual; 

而且你可以運行它來獲取可能的值的列表NLS_LANGUAGE

select * from V$NLS_VALID_VALUES where parameter = 'LANGUAGE' 
+0

這個解決方案結果並不像我期望的那樣健壯。我已將「區域和語言>格式」設置設爲「英語(美國)」,以使USERENV('LANG')返回「US」。 – yohosuff