我正在尝试通过使用ADO添加一个简单的错误记录子例程来更新一些旧版VB6代码,以使用错误的基本详细信息将行插入到SQL Server表中。该子例程接收一个标识错误类型的整数参数值(errorCode
)。解析XML文件时将发生错误。 XML文件名(通过objFile.Name
获得)将与日期,用户名和errorCode
参数值一起记录。
以下代码显示了我到目前为止的位置。我要插入到的表如下所示:
[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
语句抛出此错误:
“多步OLE DB操作生成错误。检查每个OLE DB 状态值(如果有)。没有工作。”
我对该错误消息的研究表明字段大小不匹配,但我不明白。我将不胜感激。
答案 0 :(得分:0)
是固定的。如评论中所述,我的主(调用)程序使用了一个参数。因此,当到达我的子例程的.Execute语句时,有3个参数,而不是我天真地期望的2个。首选的解决方案是使用命名参数,正如一条评论所建议的那样,但我不认为VB6支持该参数。我必须使用问号占位符来引用参数,因此它们的顺序很重要。我的子例程无法正常工作,因为当INSERT INTO语句试图将“错误”值插入具有不同数据类型的列时,意外的第一个参数(来自调用程序)导致数据类型不匹配。所以我看到的错误消息是有道理的。该修复程序与子例程无关。相反,我重新设计了调用程序,以便在调用子例程之前删除第一个参数。感谢所有为我提供帮助的人。