連線Oracle9i,因字符集造成亂碼的解決方法

2021-09-10 03:19:08 字數 1522 閱讀 1507

我們的系統連的是oracle10g的庫,現在做第三方介面,要連oracle 9i,但那邊的庫跟我們的庫不是同一種字符集,就造成了亂碼問題,據說裝9i客戶端,通過9i的客戶端連9i資料庫就可以顯示中文,在dephi裡面是這樣做的,用的provider=oraoledb.oracle.1,顯示中文沒問題,但在c#裡面這種方式卻還是亂碼,估計是跟程式語言有關,c#是託管的,執行在.net framework上。

為了這問題頭都大了,在網上找遍了方法,有改環境變數的,有改登錄檔的,結果還是不行,今天打聽到乙個可行的辦法,如果不考慮效能問題的話,即在oracle裡面用select rawtohex(utl_raw.cast_to_raw(trim(欄位名))) from 表 把中文轉換成16進製制,再在c#裡面把16進製制轉換成中文就搞定了。c#的轉換函式如下:

1

///2

///從漢字轉換到16進製制

3///

4///

5///

6public

static

string gethexfromchs(strings)7

1314 system.text.encoding chs = system.text.encoding.getencoding("

gb2312");

1516

byte bytes =chs.getbytes(s);

1718

string str = "";19

20for (int i = 0; i < bytes.length; i++)21"

, bytes[i]);23}

2425

return

str;26}

27///

28///

從16進製制轉換成漢字

29///

30///

31///

32public

static

string getchsfromhex(string

hex)

3341

//需要將 hex 轉換成 byte 陣列。

42byte bytes = new

byte[hex.length / 2

];43

44for (int i = 0; i < bytes.length; i++)

4552

catch

5357}58

59//

獲得 gb2312,chinese simplified。

60 system.text.encoding chs = system.text.encoding.getencoding("

gb2312");

6162

63return

chs.getstring(bytes);

64 }

posted @

2012-10-31 10:51

xtjatswc 閱讀(

...)

編輯收藏

Oracle 9i資料庫字符集全攻略

一 簡介 oracle 的字符集存在於伺服器端和客戶端,同時字元 包括中英文本元 儲存於資料庫中也是以一定的字符集編碼存放 正常情況下,當伺服器端與客戶端字符集一致,且載入到oracle資料庫的資料字符集與伺服器字符集也一致時,資料方能正常在客戶端進行顯示 1.伺服器字符集可用下面的語句查詢 sel...

Pro C連線中斷測試 Oracle 9i

為了測試應用程式的健壯性,故意對正常連線的pro c應該程式進行了中斷,從而觀察它們的表現。測試的方法為 1 在編譯pro c應用的時候加上cpool no或cpool yes,測試有連線池和沒連線池的不同表現 2 啟動應用程式後等待輸入,將流程掛起 3 在資料庫中查詢此測試程式的session s...

Pro C連線中斷測試 Oracle 9i

為了測試應用程式的健壯性,故意對正常連線的pro c應該程式進行了中斷,從而觀察它們的表現。測試的方法為 1 在編譯pro c應用的時候加上cpool no或cpool yes,測試有連線池和沒連線池的不同表現 2 啟動應用程式後等待輸入,將流程掛起 3 在資料庫中查詢此測試程式的session s...