国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Adodb.Command 平時很少注意到的一個參數

2019-11-18 19:30:35
字體:
來源:轉載
供稿:網友

我們在 asp 中調用 SQL Server 的存儲過程時,如果使用 Adodb.Command 對象,通常使用如下的代碼:

dim cmd, rs

set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredPRoc
cmd.CommandText = "TestProc"
cmd.Parameters.Append cmd.CreateParameter("@a" , adInteger, adParamInput, 4, 1)
cmd.Parameters.Append cmd.CreateParameter("@b" , adVarChar, adParamInput, 50, 'b')
...
set rs = cmd.Execute

今天我在調試一個程序的時候發現, ASP 頁面上提示某個參數沒有賦值, 而實際上我沒賦值的卻是另一個參數。 于是我打開 Sql Server 的事件探察器, 執行了一遍程序, 捕捉到實際上 ASP 發送給 Sql Server 的 SQL 語句實際上是如下的形式:

execute TestProc 1, 'b', ....

原因現在很明顯了,ADO 引擎沒有把對存儲過程的調用翻譯為完整的語法, 而是采用了上述簡寫方式, 這樣,當中間某個參數丟失的時候, 就有可能因為錯位而誤判為另一個參數丟失。
然后我查了一下 Command 對象的屬性, 加了如下一句:

cmd.NamedParameters = true

也就是說指定要使用顯式命名的變量形式, 然后再執行一邊程序, 發現事件探察器中捕捉到的語句變成了:

exec TestProc @a = 1, @b = 'b', ...

報錯的參數也是正確的。
Everything is OK now


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 淮南市| 稷山县| 汝城县| 建水县| 和田市| 海伦市| 天门市| 肥乡县| 天水市| 宁南县| 皮山县| 和硕县| 三明市| 铁岭县| 天台县| 海门市| 小金县| 衡东县| 木兰县| 临夏县| 深圳市| 威信县| 鄂伦春自治旗| 通许县| 商洛市| 古田县| 岐山县| 满洲里市| 天长市| 平塘县| 武鸣县| 乌兰浩特市| 平泉县| 徐汇区| 商水县| 女性| 新密市| 安西县| 康保县| 威海市| 孟津县|