使用VBA中不同变量类型的SQL参数化查询?

使用VBA中不同变量类型的SQL参数化查询?,sql,vba,sql-server-2005,Sql,Vba,Sql Server 2005,在使用来自VBA的SQL和参数化查询时,我遇到了以下问题 当我构造参数时,我可以分别构造varchar和int参数并正确使用它们。但是,当我混合使用它们时,会出现以下SQL错误: Operand type clash: text is incompatible with int 当我组合多种类型的参数时,SQL似乎将所有内容都转换为文本 为了允许第三种情况(使用不同类型的参数)工作,我必须对代码(VBA/SQL)做哪些不同的处理 以下是VBA代码: 子测试DoDBParameters() D

在使用来自VBA的SQL和参数化查询时,我遇到了以下问题

当我构造参数时,我可以分别构造varchar和int参数并正确使用它们。但是,当我混合使用它们时,会出现以下SQL错误:

Operand type clash: text is incompatible with int
当我组合多种类型的参数时,SQL似乎将所有内容都转换为文本

为了允许第三种情况(使用不同类型的参数)工作,我必须对代码(VBA/SQL)做哪些不同的处理


以下是VBA代码:

子测试DoDBParameters()
Dim Cn作为ADODB.Connection
将Cm设置为ADODB.Command
作为ADODB.参数的Dim Pm
作为ADODB.参数的尺寸Pm2
将Rs设置为ADODB.Recordset
Set Cn=New ADODB.Connection
Cn.Open“validConnectionString
Set Cm=New ADODB.Command
关于错误转到错误处理程序
有厘米
.ActiveConnection=Cn
.CommandType=adCmdText
设置Pm=.CreateParameter(“TestInt”、adInteger、adParamInput)
Pm.value=1
设置Pm2=.CreateParameter(“TestVarChar”,adVarChar,adParamInput,-1)
Pm2.value=“testhi”
“这很管用
如果是真的话
.CommandText=“插入测试(测试)值(?)”
.Parameters.Pm
如果结束
"这也行得通
如果是假的话
.Parameters.Pm2
.CommandText=“插入测试(TestVarChar)值(?)”
如果结束
“这失败于:
'操作数类型冲突:文本与int不兼容
如果是假的话
.Parameters.Pm
.Parameters.Pm2
.CommandText=“插入测试(TestVarChar,TestInt)值(?,);”
如果结束
设置Rs=.Execute
以
错误处理程序:
调试.打印错误说明
端接头
以下是生成表的SQL代码:

CREATE TABLE Test (
    ID int IDENTITY(1,1) PRIMARY KEY,
    TestVarChar varchar(50),
    TestInt int
);

您在查询中处于VARCHAR,INT顺序,可以尝试以下操作:

        .Parameters.Append Pm2
        .Parameters.Append Pm
        .CommandText = "INSERT INTO Test(TestVarChar,TestInt) VALUES(?,?);"

它能工作吗?

Pm
是一个Int参数,但看起来您正在将它分配给
TestVarChar
列。例如,您的参数已切换到位。请将命令文本更改为
.CommandText=“插入测试(TestInt,TestVarChar)值(?,);”
@TimWilliams情况绝对如此。。。我怀疑这也是我更复杂的查询的最终问题(这是一个测试示例,显然我在我的最小工作示例中复制了一些类似的问题逻辑…太棒了)