通过VB6和ADO插入具有多个参数的INTO

时间:2019-07-11 00:22:16

标签: sql-server parameters vb6 sql-insert ado

我正在尝试通过使用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   状态值(如果有)。没有工作。”

我对该错误消息的研究表明字段大小不匹配,但我不明白。我将不胜感激。

1 个答案:

答案 0 :(得分:0)

是固定的。如评论中所述,我的主(调用)程序使用了一个参数。因此,当到达我的子例程的.Execute语句时,有3个参数,而不是我天真地期望的2个。首选的解决方案是使用命名参数,正如一条评论所建议的那样,但我不认为VB6支持该参数。我必须使用问号占位符来引用参数,因此它们的顺序很重要。我的子例程无法正常工作,因为当INSERT INTO语句试图将“错误”值插入具有不同数据类型的列时,意外的第一个参数(来自调用程序)导致数据类型不匹配。所以我看到的错误消息是有道理的。该修复程序与子例程无关。相反,我重新设计了调用程序,以便在调用子例程之前删除第一个参数。感谢所有为我提供帮助的人。