10年前用VB6編寫的程式,不停的修修改改,一直用到現在,而且將繼續使用幾年。
本人最近接手了這個程式,除了“悲催”,實在想不出來其他詞來形容本人的心情了。
廢話略過,最近碰到一個調用預存程序的問題,耗費了一些時間,最終解決了,把結果貼出來,如果還有人像本人一樣在用VB6,希望能有所協助。
這個古老的程式,在調用oracle預存程序時,根據配置可使用不同的資料引擎,有2種可選
Provider=OraOledb.Oracle.1
Provider=MSDAORA.1
調用預存程序的代碼如下
'cnDb.ConnectionString = "Provider=MSDAORA.1;… "
cnDb.Open
cmd.ActiveConnection = cnDb
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "procName"
cmd.Parameters("para1") =para1
cmd.Parameters("para2") =para2
cmd.Execute 'Provider=OraOledb.Oracle.1時,在這裡報錯
paraOut = cmd("out") ' 輸出參數是string類型
如果使用“Provider=OraOledb.Oracle.1”,調用預存程序時報錯“提供者不能匯出參數資訊,沒有調用 SetParameterInfo”。
如果使用“Provider=MSDAORA.1”,則調用預存程序正常。
查閱了一些資料,修改為下面的代碼,使用2種方式都可以正常調用
'cnDb.ConnectionString = "Provider=MSDAORA.1;… "
cnDb.Open
cmd.ActiveConnection = cnDb
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "procName"
cmd.Parameters.Append cmd.CreateParameter( "para1", adLongVarChar, adParamInput, 1000, para1)
cmd.Parameters.Append cmd.CreateParameter( "para2", adLongVarChar, adParamInput, 1000, para2)
cmd.Execute 'Provider=OraOledb.Oracle.1時,不報錯了
paraOut = cmd("out") ' 輸出參數是string類型
如果預存程序返回結果集,情況更複雜,參見這裡:http://topic.csdn.net/t/20060323/15/4634977.html