2012年7月31日

解決.net oleDB連到Oracle無法使用parameter

為了防止sql injection一般會使用Parameter來取代條件值,對於要取代的變數,不同的db provider有不同取代方式:

SqlCommand: @ +變數
sql=" and active_inactive_code = @active_inactive_code"
OracleClient: 冒號+變數
sql=" and active_inactive_code = :active_inactive_code"
OleDB & ODBC: 直接給問號 sql=and active_inactive_code = ?"
最近發現一個問題,就是安裝了Oracle Client之後, 利用OleDB方式讀取Oracle資料庫,竟然讀不到資料 :
Reader = _SelectCommand.ExecuteReader();
if (Reader.Read()) { }

但改以不用參數取代的SQL ,如下:
sql" and active_inactive_code = ‘2222’
就可執行。
經過重新安裝Oracle client程式也無法解決,後來回想一下,在我進入PL/SQL Developer跳出以下視窗,有依據指示改了client端的registry。
image
結果就造成了 OleDB在使用 Parameter時發生異常,而無法查詢到正確資料。
參考
http://msdn.microsoft.com/en-us/library/yy6y35y8.aspx

沒有留言:

張貼留言