Een snelle test hier laat zien dat NULL het werk zou moeten doen. Voorbeeldcode die ik heb gebruikt om te testen (op een eenvoudig formulier met één knop en één tekstvak):
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
En het noemde dit opgeslagen proces:
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 heeft 'NULL' geretourneerd voor het gebruik van de VB-waarde Null
(zoals in het bovenstaande voorbeeld), en 'NOT NULL' voor vbNull
. Als Null
werkt niet voor jou, dan kan ik geen commentaar geven op wat er mis zou kunnen zijn...!
Evenzo moeten lege tekenreeksen zo worden doorgegeven - een lege tekenreeks, d.w.z. str = ""
-- waardoor usp_Bob 'EMPTY' retourneert. Voor al het andere wordt 'NIET NULL EN NIET LEEG' geretourneerd (zoals verwacht).
Als je NULL niet kunt laten passeren, dan is een andere optie om een lege string naar NULL in de sproc te casten -- d.w.z.
IF @param = ''
SET @param = NULL
Houd er rekening mee dat de lengte die u doorloopt niet zo veel uitmaakt. Het is een weerspiegeling van de maximale lengte van de parameter zoals gedefinieerd in SQL Server in plaats van de lengte van de gegevens die u doorgeeft.