首页 > 解决方案 > 通过 VB6 和 ADO 插入多个参数

问题描述

我正在尝试通过添加一个简单的错误日志记录子例程来更新一些旧版 VB6 代码,该子例程使用 ADO 将一行插入到 SQL Server 表中,其中包含错误的基本详细信息。子例程接收标识错误类型的整数参数值 ( errorCode)。解析 XML 文件时会发生错误。XML 文件名(通过 获得objFile.Name)将与日期、用户名和errorCode参数值一起记录。

下面的代码显示了我到目前为止的位置。我试图 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语句会引发此错误:

“多步 OLE DB 操作产生错误。检查每个 OLE DB 状态值(如果可用)。没有完成任何工作。”

我对该错误消息的研究表明字段大小不匹配,但我不明白。我会很感激任何方向。

标签: sql-serverparametersvb6sql-insertado

解决方案


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


推荐阅读