【发布时间】:2024-01-12 20:17:01
【问题描述】:
我正在尝试通过添加一个简单的错误记录子例程来更新一些旧版 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 状态值(如果可用)。没有完成任何工作。”
我对该错误消息的研究表明字段大小不匹配,但我不明白这一点。我会很感激任何方向。
【问题讨论】:
-
欢迎来到 SO。用VB6已经很多年了,如果我错了,请原谅我,但我认为你应该尝试将adVarChar作为你的第一个参数的数据类型。
-
乔纳森:谢谢你的建议。我试过了,但我仍然得到同样的错误。
-
改用 adVarWChar。您的 SQL 表具有 nvarchar。另外,当表字段有 255 时,为什么要将长度限制为 50?后者不会是问题,我只是好奇。
-
我想到的另外两件事,可能会导致问题。首先,传递的实际文件名是什么?请检查它是否没有奇怪的字符。其次,您可以尝试更改表定义以使 runDate 默认为
GETDATE()和 runBy 默认为CURRENT_USER。这样你的 sql 只需要插入两个值。这可能会简化问题。 -
开始工作后,我有机会在旧机器上运行您的代码。我不能重复你的错误,这让我强烈怀疑问题出在 objFile.Name 上。请发布这个值是多少。
标签: sql-server parameters vb6 sql-insert ado