sql-server - 通过 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 状态值(如果可用)。没有完成任何工作。”
我对该错误消息的研究表明字段大小不匹配,但我不明白。我会很感激任何方向。
解决方案
它是固定的。正如评论中所解释的,我的主(调用)程序使用了一个参数。所以,当我的子程序的 .Execute 语句到达时,有 3 个参数,而不是我天真的预期的只有 2 个。正如一条评论所建议的那样,首选的解决方案是使用命名参数,但我认为 VB6 不支持。我必须用问号占位符引用参数,所以它们的顺序很重要。我的子例程不起作用,因为当 INSERT INTO 语句尝试将“错误”值插入具有不同数据类型的列时,意外的第一个参数(来自调用程序)导致数据类型不匹配。所以我看到的错误信息是有道理的。该修复与子例程无关。反而,我重新编写了调用程序,以便在调用子程序之前删除第一个参数。感谢所有帮助我的人。
推荐阅读
- r - 匹配栅格在 foreach 循环中不起作用
- r - 在R中创建不等长列表的数据框
- python - 使用递归函数在字符串之间插入字符 - python
- node.js - 具有 createdAt 和 updatedAt 时间戳的超级账本结构链码 getState()
- angular - 如何在 Angular 应用程序中为单个路由设置 404 状态码?
- python - 多进程 - 为什么 multiprocessing.Pipe python2 比 python3 快
- telegram - 当用户点击它时,inLineKeyboardButton 在哪里响应
- django - 对自定义 Django 用户模型的任何更改都在 Admin 中完全被忽略
- kivy - 在将我的 kivymd 文件转换为 apk 时,我遇到了某种错误,我无法理解那是什么
- flutter - 错误参数类型“对象?” 不能分配给参数类型“颜色?”