整数createparameter

时间:2014-10-17 09:29:26

标签: vbscript ado

我想将受训者保存到数据库中,所以我创建了一个这样的插入查询:

set cmd = Server.CreateObject("ADODB.Command")

cmd.ActiveConnection = objCon
cmd.CommandText = "INSERT INTO tbOpleiders([opleiderDescr], [customerID]) VALUES(?, ?) "
Set paramdesc = cmd.CreateParameter("@descr", 200, 1, 100, newOpleidingsDescr)
Set paramcust = cmd.CreateParameter("@customer", 3, 1, 1000,customerID)
cmd.Parameters.Append paramdesc
cmd.Parameters.Append paramcust

现在我没有得到“CreateParameter”我发现它是:名称,类型,方向,大小,值 第一个参数是逻辑的,但为什么应该有第二个参数(ID int字段)的大小?

并且第二个问题为什么必须将值设置为?,?而不是像C#中那样:@descr,@ customer

1 个答案:

答案 0 :(得分:3)

如有疑问,请阅读documentation

  

如果在 Type 参数中指定可变长度数据类型,则必须传递 Size 参数或设置 Parameter <的Size属性/ b>将对象附加到参数集合之前;否则会发生错误。

4 th 参数仅适用于可变长度数据类型(例如adVarChar)。对于固定大小的数据类型(如adInteger),可以省略(如果您提供大小,则忽略该大小):

Set paramcust = cmd.CreateParameter("@customer", 3, 1, , customerID)

至于使用命名参数:它们似乎不适用于ADO。我对我的测试数据库进行了快速测试,但即使将NamedParameters设置为True,参数也按照它们的附加顺序传递,而不是将它们与查询中的相应名称相匹配:

>>> Set cmd = CreateObject("ADODB.Command")
>>> cmd.ActiveConnection = cn
>>> cmd.NamedParameters = True
>>> cmd.CommandText = "INSERT INTO [Tab1] ([name], [val]) VALUES (@name, @val)"
>>> Set p1 = cmd.CreateParameter("@name", 200, 1, 20, "foobar")
>>> Set p2 = cmd.CreateParameter("@val", 3, 1, , 43)
>>> 'append parameters in correct order
>>> cmd.Parameters.Append p1
>>> cmd.Parameters.Append p2
>>> cmd.Execute
>>> 'no error here
>>> Set cmd = CreateObject("ADODB.Command")
>>> cmd.ActiveConnection = cn
>>> cmd.NamedParameters = True
>>> cmd.CommandText = "INSERT INTO [Tab1] ([name], [val]) VALUES (@name, @val)"
>>> Set p1 = cmd.CreateParameter("@name", 200, 1, 20, "foobar")
>>> Set p2 = cmd.CreateParameter("@val", 3, 1, , 43)
>>> 'append parameters in reversed order
>>> cmd.Parameters.Append p2
>>> cmd.Parameters.Append p1
>>> cmd.Execute
Data type mismatch in criteria expression. (0x80040E07)

我怀疑C#使用的是ADO.net而不是经典的ADO,这在这方面似乎有所不同。