我們在 ASP 中調(diào)用 SQL Server 的存儲過程時,如果使用 Adodb.Command 對象,通常使用如下的代碼: dim cmd, rs set cmd = Server.CreateObject("ADODB.Command") 今天我在調(diào)試一個程序的時候發(fā)現(xiàn), ASP 頁面上提示某個參數(shù)沒有賦值, 而實際上我沒賦值的卻是另一個參數(shù)。 于是我打開 Sql Server 的事件探察器, 執(zhí)行了一遍程序, 捕捉到實際上 ASP 發(fā)送給 Sql Server 的 SQL 語句實際上是如下的形式: execute TestProc 1, 'b', .... 原因現(xiàn)在很明顯了,ADO 引擎沒有把對存儲過程的調(diào)用翻譯為完整的語法, 而是采用了上述簡寫方式, 這樣,當中間某個參數(shù)丟失的時候, 就有可能因為錯位而誤判為另一個參數(shù)丟失。 cmd.NamedParameters = true 也就是說指定要使用顯式命名的變量形式, 然后再執(zhí)行一邊程序, 發(fā)現(xiàn)事件探察器中捕捉到的語句變成了: exec TestProc @a = 1, @b = 'b', ... 報錯的參數(shù)也是正確的。 |
溫馨提示:喜歡本站的話,請收藏一下本站!