INSERT INTO с несколькими параметрами через VB6 и ADO - PullRequest
2 голосов
/ 11 июля 2019

Я пытаюсь обновить устаревший код VB6, добавив простую подпрограмму регистрации ошибок с помощью ADO, чтобы вставить строку в таблицу SQL Server с основными сведениями об ошибке.Подпрограмма получает целочисленное значение параметра (errorCode), которое идентифицирует тип ошибки.Ошибка произошла при синтаксическом анализе файла XML.Имя файла XML (полученное через objFile.Name) должно быть зарегистрировано вместе с датой, именем пользователя и значением параметра errorCode.

Приведенный ниже код показывает, где я до сих пор.Таблица, которую я пытаюсь вставить 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, если оно доступно. Никакой работы не было."

Мое исследование этого сообщения об ошибке указывает на несоответствие размера поляно я этого не понимаюБуду признателен за любое направление.

1 Ответ

0 голосов
/ 12 июля 2019

Это исправлено.Как объяснено в комментариях, моя основная (вызывающая) программа использует параметр.Поэтому, когда был достигнут оператор .Execute моей подпрограммы, было 3 параметра вместо 2, как я наивно ожидал.Как было предложено в одном комментарии, предпочтительным решением было бы использовать именованные параметры, но я не думаю, что VB6 поддерживает это;Я должен ссылаться на параметры с заполнителями вопросительного знака, поэтому их порядок имеет значение.Моя подпрограмма не сработала, потому что неожиданный первый параметр (из вызывающей программы) вызвал несоответствие типов данных, когда инструкция INSERT INTO пыталась вставить «неправильное» значение в столбец с другим типом данных.Так что сообщение об ошибке, которое я видел, имело смысл.Исправление не имело ничего общего с подпрограммой.Вместо этого я переработал вызывающую программу, чтобы удалить первый параметр перед вызовом подпрограммы.Спасибо всем, кто помог мне с этим.

...