Adodb.Command 平时很少注意到的一个参数

2016-01-29 18:45 6 1 收藏

Adodb.Command 平时很少注意到的一个参数,Adodb.Command 平时很少注意到的一个参数

【 tulaoshi.com - ASP 】

 

我们在 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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/asp/)

也就是说指定要使用显式命名的变量形式, 然后再执行一边程序, 发现事件探察器中捕捉到的语句变成了:

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

报错的参数也是正确的。
Everything is OK now

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/asp/) 

来源:http://www.tulaoshi.com/n/20160129/1507173.html

延伸阅读
标签: SQLServer
  问:怎样在一个UPDATE语句中使用表B的三个列更新表A中的三个列? 答:对这个问题,您可以使用强大的关系代数。本页中的代码说明了如何组合使用FROM子句和JOIN操作,以达到用其他表中数据更新指定列的目的。在设计关系表达式时,您需要决定是否需要单一行匹配多个行(一对多关系),或者需要多个行匹配被联接表中的单一行以更新所有行...
如果2张表的字段一致,并且希望插入全部数据,可以用这种方法: Code: 代码如下: INSERT INTO 目标表 SELECT * FROM
标签: 暗黑破坏神3
《暗黑破坏神3》你没有注意到的细节 一、碰撞体积 跟魔兽世界不同,暗黑系列游戏中存在碰撞体积。你无法从正面推倒对方然后穿人而过,在敌人的背后攻击。所以在遇见大量怪物的时候,恰巧的你的装备又没到碾压他们的程度。那么就边打边后退吧。这样可以避免5到6只怪围住你,同时对你造成伤害。当然更大的用处是在对付JY怪群。尤其是在面对那些体...
孕妇床垫怎么选 1、透气性好 床的透气性是很重要的一点,所以选择一张透气性好的床垫,就显得非常的重要了。床垫最好是选择吸湿、通气、保温性能好床垫。因为,孕妇之后坐月子,都是女人身体最虚弱的时候,要的床垫易吸水、不干爽,非常容易得风湿和风痛。 2、静音性能好 对于孕妇,体内的孕激素会出现不停的变化,这样会导致睡眠质量...
首先应该建立一个combo1的comboBox控件,作为下拉框的最终实现工具。 Private Sub Combo1_Click() MSFlexGrid1.Row = MSFlexGrid1.RowSel MSFlexGrid1.Col = 2 MSFlexGrid1.Text = Combo1.Text End Sub 'Private Sub Combo1_LostFocus() 'Combo1.Text = MSFlexGrid1.Text 'End Sub Private Sub Form_Load() Combo1.Vis...

经验教程

592

收藏

75
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部