Поскольку это не оплачиваемое время или даже очень полезный, если Вы не собираетесь продать его.
существуют совершенно хорошие доступные системы отслеживания ошибок, например, FogBugz.
Быстрый тест показывает, что 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, а не длины передаваемых вами данных.
Я всегда передаю DBNULL.Value в качестве значения параметра при вставке нуля в столбец
.