ADODB.Command使用adInteger参数报错:默认参数无效求助
问题分析与解决方案
这个报错的核心原因是**CreateParameter方法的参数格式错误**,尤其是adInteger类型参数的定义不符合ADODB的要求,下面具体拆解问题并给出修复方案:
1. 关键问题点
adInteger参数的Size参数缺失:对于数值类型(比如adInteger),CreateParameter的第三个参数(Size)不能直接留空跳过!SQL Server的int类型固定长度为4,必须明确指定这个值,否则ODBC驱动会解析错误,触发「Invalid use of default parameter」的报错。- 参数大小写不规范:代码里出现了
advarchar的写法,虽然VBScript不区分大小写,但统一写成adVarChar能避免潜在的解析问题,也更规范。
2. 修复后的代码
set cmd = Server.CreateObject("ADODB.Command") cmd.ActiveConnection = tadsdb cmd.CommandText = "insert into poc_data (poc_userid, POC_FNAME,POC_LNAME, POC_EMAIL, POC_ORG, DSN_PHONE, DSN_FAX, POC_TYPE_ID,UNIT_ID) values(?,?,?,?,?,?,?,?,?)" cmd.CommandType = adCmdText ' 统一修正adVarChar的大小写,保证参数格式一致 cmd.Parameters.Append cmd.CreateParameter("@new_id", adVarChar, , 50, new_id) cmd.Parameters.Append cmd.CreateParameter("@first_name", adVarChar, , 50, first_name) cmd.Parameters.Append cmd.CreateParameter("@last_name", adVarChar, , 50, last_name) cmd.Parameters.Append cmd.CreateParameter("@email", adVarChar, , 50, email) cmd.Parameters.Append cmd.CreateParameter("@organization", adVarChar, , 50, organization) cmd.Parameters.Append cmd.CreateParameter("@dsn_phone", adVarChar, , 50, dsn_phone) cmd.Parameters.Append cmd.CreateParameter("@dsn_fax", adVarChar, , 50, dsn_fax) cmd.Parameters.Append cmd.CreateParameter("@user_type", adVarChar, , 50, user_type) ' 重点修复:给adInteger参数指定长度为4 cmd.Parameters.Append cmd.CreateParameter("@unit_id", adInteger, , 4, unit_id) cmd.Execute set cmd = Nothing
3. 补充说明
ADODB的CreateParameter方法完整签名是:
CreateParameter(Name, Type, Direction, Size, Value)
对于字符串类型(adVarChar等),Size可以通过逗号跳过(因为驱动可以从值推断),但数值类型不行——必须明确指定对应SQL数据类型的长度,比如:
adInteger对应SQLint,长度4adSmallInt对应SQLsmallint,长度2adTinyInt对应SQLtinyint,长度1
只要修正这个参数格式,即使硬编码值也能正常执行,不会再触发报错。
内容的提问来源于stack exchange,提问作者user8053788
相关产品推荐
相关产品推荐

