通过 VB6 和 ADO 使用多个参数插入
INSERT INTO with multiple parameters via VB6 & ADO
我正在尝试更新一些遗留的 VB6 代码,方法是添加一个简单的错误记录子例程,使用 ADO 在 SQL 服务器 table 中插入一行,其中包含错误的基本详细信息。该子例程接收一个整数参数值 (errorCode
),用于标识错误类型。解析 XML 文件时会发生错误。 XML 文件名(通过 objFile.Name
获得)将与日期、用户名和 errorCode
参数值一起记录。
下面的代码显示了我目前的位置。 table 我正在尝试 INSERT INTO 看起来像这样:
[dbo].[tblXMLerrorLog](
[errorLogID] [int] IDENTITY(1,1) NOT NULL,
[runDate] [datetime2](0) NULL,
[runBy] [nvarchar](255) NULL,
[xmlFileWithError] [nvarchar](255) NULL,
[errorCode] [int] NULL)
Sub writeErrorLog(errorCode As Integer)
strSQL = "INSERT INTO dbo.tblXMLerrorLog (runDate, runBy, xmlFileWithError, errorCode)
VALUES(GetDate(), Current_User,?,?);"
With cmd
.CommandType = adCmdText
.CommandText = strSQL
Set par1 = .CreateParameter("@xmlFileWithError", adChar, adParamInput, 50, objFile.Name)
.Parameters.Append par1
Set par2 = .CreateParameter("@errorCode", adInteger, adParamInput, , errorCode)
.Parameters.Append par2
.ActiveConnection = Cnxn
.Execute ' update error log
.Parameters.Delete ("@xmlFileWithError")
.Parameters.Delete ("@errorCode")
End With
End Sub
当我 运行 代码 .Execute
语句抛出此错误:
"Multiple-step OLE DB operation generated errors. Check each OLE DB
status value, if available. No work was done."
我对该错误消息的研究表明字段大小不匹配,但我不明白。如果有任何指示,我将不胜感激。
已修复。正如评论中所解释的,我的主(调用)程序使用了一个参数。因此,当到达我的子例程的 .Execute 语句时,有 3 个参数,而不是我天真地期望的只有 2 个。正如一条评论所建议的那样,首选的解决方案是使用命名参数,但我认为 VB6 不支持该功能;我必须使用问号占位符引用参数,因此它们的顺序很重要。当 INSERT INTO 语句试图将 'wrong' 值插入具有不同数据类型的列时,意外的第一个参数(来自调用程序)导致数据类型不匹配,因此我的子例程无法运行。所以我看到的错误信息是有道理的。修复与子例程无关。相反,我修改了调用程序,以便在调用子例程之前删除第一个参数。感谢所有帮助过我的人。
我正在尝试更新一些遗留的 VB6 代码,方法是添加一个简单的错误记录子例程,使用 ADO 在 SQL 服务器 table 中插入一行,其中包含错误的基本详细信息。该子例程接收一个整数参数值 (errorCode
),用于标识错误类型。解析 XML 文件时会发生错误。 XML 文件名(通过 objFile.Name
获得)将与日期、用户名和 errorCode
参数值一起记录。
下面的代码显示了我目前的位置。 table 我正在尝试 INSERT INTO 看起来像这样:
[dbo].[tblXMLerrorLog](
[errorLogID] [int] IDENTITY(1,1) NOT NULL,
[runDate] [datetime2](0) NULL,
[runBy] [nvarchar](255) NULL,
[xmlFileWithError] [nvarchar](255) NULL,
[errorCode] [int] NULL)
Sub writeErrorLog(errorCode As Integer)
strSQL = "INSERT INTO dbo.tblXMLerrorLog (runDate, runBy, xmlFileWithError, errorCode)
VALUES(GetDate(), Current_User,?,?);"
With cmd
.CommandType = adCmdText
.CommandText = strSQL
Set par1 = .CreateParameter("@xmlFileWithError", adChar, adParamInput, 50, objFile.Name)
.Parameters.Append par1
Set par2 = .CreateParameter("@errorCode", adInteger, adParamInput, , errorCode)
.Parameters.Append par2
.ActiveConnection = Cnxn
.Execute ' update error log
.Parameters.Delete ("@xmlFileWithError")
.Parameters.Delete ("@errorCode")
End With
End Sub
当我 运行 代码 .Execute
语句抛出此错误:
"Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done."
我对该错误消息的研究表明字段大小不匹配,但我不明白。如果有任何指示,我将不胜感激。
已修复。正如评论中所解释的,我的主(调用)程序使用了一个参数。因此,当到达我的子例程的 .Execute 语句时,有 3 个参数,而不是我天真地期望的只有 2 个。正如一条评论所建议的那样,首选的解决方案是使用命名参数,但我认为 VB6 不支持该功能;我必须使用问号占位符引用参数,因此它们的顺序很重要。当 INSERT INTO 语句试图将 'wrong' 值插入具有不同数据类型的列时,意外的第一个参数(来自调用程序)导致数据类型不匹配,因此我的子例程无法运行。所以我看到的错误信息是有道理的。修复与子例程无关。相反,我修改了调用程序,以便在调用子例程之前删除第一个参数。感谢所有帮助过我的人。