【茶包射手專欄】ASP.NET在IIS7上讀不到Oracle中文

測試Silverlight的過程中,發現我的Web Application Project,使用Visual Studio 2008直接執行時測試正常,但移到IIS7下執行,由Oracle讀取的中文卻會變成問號。

我將程式簡化如下:

using (OracleConnection cn = new OracleConnection(cnStr))
{
    cn.Open();
    OracleCommand cmd = 
        new OracleCommand("SELECT '良好' FROM DUAL", cn);
    OracleDataReader dr = cmd.ExecuteReader();
    DataTable dt = new DataTable();
    dt.Load(dr);
    string ss = dt.Rows[0][0].ToString();
    byte[] b = Encoding.Unicode.GetBytes(ss);
    Response.Write(ss + " " + BitConverter.ToString(b));
}
Response.End();

預期要出現的結果應是,良好 6F-82-7D-59,在IIS7上則看到 ?? 3F-00-3F-00

一直在揣摩二者間的差異(ASP.NET Dev Server vs IIS7),想到該不會是x64做怪? 將Web App Project Build Target由Any CPU改為x86,變成以下錯誤:

Could not load file or assembly 'WCS.Web' or one of its dependencies. An attempt was made to load a program with an incorrect format.

研判與Application Pool同時有x64/x86並存有關,另外建了一個App Pool給WCS.Web,則Build成x86也可執行了,但仍無法解決亂碼的問題。

最後Google到一個可疑之處,IIS7的App Pool可以設定是否啟用32bit Application的選項。而之前在Windows 2008 x64裝x86與x64兩個版本的ORACLE Client的經驗刻骨銘心,讓我不禁懷疑與此有關...

預設為False,開啟為True後,可愛的中文終於出現了!!

歡迎推文分享:
Published 27 March 2009 08:04 PM 由 Jeffrey
Views: 9,190



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<March 2009>
SunMonTueWedThuFriSat
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication