我无法通过ado参数化查询将字符串(varchar)以外的数据发送到存储过程。
假设我只是尝试发送一个int
参数,并且存在一个接受单个int的存储过程。当我运行代码时,我得到type mismatch
。
如果我将int
更改为String
,并且存储过程接受varchar
则可行。此外,存储过程与使用VBScript和PHP编写的其他代码一起使用。所以我猜它不是存储过程。
我假设它与.createParameter
行 - 类型或长度有关
或者可能属性排在下面几行。我尝试了很多不同的组合,但无济于事。
如果我需要更多地清理代码,请告诉我。感谢。
command.ActiveConnection = myconn;
command.CommandText = this.procedure;
command.CommandType = 4;
prmCount = 0;
//Build Parmeters
for(var p in this.params){ //<--- I set these params earlier -- they behave as expected
if(this.params.hasOwnProperty(p)){
command.Parameters.Append(
command.CreateParameter(
"",
this.params[p].type, // <-- i've tried pretty much every value for the type - 3, 19, 14, 5, ...
this.params[p].direction, // <-- this is the same for all inputs
this.params[p].length // <-- i send null for this value
)
);
//A Fix for Null String values
if(this.params[p].value === null || this.params[p].value === ""){
command.Parameters(prmCount).Attributes = 64;
}
//Some examples show adding a `.Attributes` value for some integers
//However this didn't help
//
//if(this.params[p].type === 3){
//command.Parameters(prmCount).Attributes = 128;
//}
command.Parameters(prmCount).Value = this.params[p].value; //<-- Set the value here
prmCount+=1;
}
}
record = command.Execute();