Как передать Пустые или пустые строки входному параметру хранимой процедуры с ADO и VB?

Поскольку это не оплачиваемое время или даже очень полезный, если Вы не собираетесь продать его.

существуют совершенно хорошие доступные системы отслеживания ошибок, например, FogBugz.

8
задан Benjamin 8 July 2014 в 16:25
поделиться

2 ответа

Быстрый тест показывает, что NULL должен выполнять свою работу. Пример кода, который я использовал для тестирования (на простой форме с одной кнопкой и одним текстовым полем):

Private Sub Command1_Click()
    Dim dbConn As ADODB.Connection
    Dim dbComm As ADODB.Command
    Dim dbRS As ADODB.Recordset

    Set dbConn = New ADODB.Connection
    With dbConn
        .ConnectionString = "...REPLACE THIS ACCORDINGLY..."
        .ConnectionTimeout = 10
        .Open
    End With
    Set dbComm = New ADODB.Command
    With dbComm
        .ActiveConnection = dbConn
        .CommandType = adCmdStoredProc
        .CommandText = "usp_Bob"
        .Parameters.Append .CreateParameter("b", adVarChar, adParamInput, 10, Null)
        Set dbRS = .Execute
    End With
    Text1.Text = dbRS.Fields.Item(0).Value

    dbRS.Close
    dbConn.Close
End Sub

И он вызвал эту сохраненную процедуру:

ALTER PROCEDURE usp_Bob
 @b VARCHAR(10)
AS
 IF @b IS NULL
  SELECT 'NULL' AS '1'
 ELSE
  IF @b = ''
   SELECT 'EMPTY' AS '1'
  ELSE
   SELECT 'NOT NULL AND NOT EMPTY' AS '1'

usp_Bob вернул 'NULL' для использования значения VB Null ( в соответствии с образцом выше) и «NOT NULL» для vbNull . Если Null у вас не работает, я не могу комментировать, что может быть не так ...!

Точно так же пустые строки должны передаваться точно так же - пустая строка, т.е. str = "" - что заставляет usp_Bob возвращать "EMPTY". Все остальное возвращает 'NOT NULL AND NOT EMPTY' (как и ожидалось).

Если вы не можете передать NULL, тогда другой вариант - преобразовать пустую строку в NULL в sproc, т. Е.

IF @param = ''
    SET @param = NULL

Учтите, что длина, которую вы пройдете, не должна иметь большого значения. Это отражение максимальной длины параметра, определенной в SQL Server, а не длины передаваемых вами данных.

11
ответ дан 5 December 2019 в 09:26
поделиться

Я всегда передаю DBNULL.Value в качестве значения параметра при вставке нуля в столбец

.
2
ответ дан 5 December 2019 в 09:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: