【茶包射手專欄】ASP.NET在IIS7上讀不到Oracle中文
0 |
測試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後,可愛的中文終於出現了!!
Comments
Be the first to post a comment