Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 通过VB6&;阿多_Sql Server_Parameters_Vb6_Sql Insert_Ado - Fatal编程技术网

Sql server 通过VB6&;阿多

Sql server 通过VB6&;阿多,sql-server,parameters,vb6,sql-insert,ado,Sql Server,Parameters,Vb6,Sql Insert,Ado,我试图通过添加一个简单的错误记录子例程来更新一些遗留的VB6代码,该子例程使用ADO在SQL Server表中插入一行,其中包含错误的基本详细信息。子例程接收识别错误类型的整型参数值(errorCode)。解析XML文件时将发生错误。XML文件名(通过objFile.name获得)将与日期、用户名和errorCode参数值一起记录 下面的代码显示了到目前为止我所处的位置。我试图插入的表如下所示: [dbo].[tblXMLerrorLog]( [errorLogID] [int] IDENTIT

我试图通过添加一个简单的错误记录子例程来更新一些遗留的VB6代码,该子例程使用ADO在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)

当我运行代码时,
.Execute
语句抛出以下错误:

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


我对该错误消息的研究表明字段大小不匹配,但我不理解这一点。我很乐意为您指路。

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

欢迎来到SO。我使用VB6已经很多年了,如果我错了,请原谅,但我认为您应该尝试使用adVarChar作为第一个参数的数据类型。乔纳森:谢谢您的建议。我试过了,但仍然出现同样的错误。请改为尝试adVarWChar。您的SQL表具有nvarchar。另外,当表字段的长度为255时,为什么要将长度限制为50?这不是问题,我只是好奇。我还想到了另外两件事,这可能会引起问题。首先,传递的实际文件名是什么?请检查它是否没有奇怪的字符。其次,您可以尝试更改表定义,使runDate默认为
GETDATE()
,runBy默认为
CURRENT\u USER
。这样,您的sql只需要插入两个值。这可能会简化问题。由于要工作,我有机会在旧机器上运行您的代码。我不能重复您的错误,这使我强烈怀疑问题在于objFile.Name。请张贴此值是多少。
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