使用参数化查询将整数发送到数据库

时间:2015-03-23 21:10:49

标签: javascript asp-classic ado

我无法通过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();

0 个答案:

没有答案