Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie übergibt man mit ADO und VB NULL oder leere Zeichenfolgen an den Eingabeparameter der gespeicherten Prozedur?

Ein schneller Test hier zeigt, dass NULL die Arbeit erledigen sollte. Beispielcode, den ich zum Testen verwendet habe (auf einem einfachen Formular mit einer Schaltfläche und einem Textfeld):

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

Und es nannte diese gespeicherte Prozedur:

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 gab 'NULL' für die Verwendung des VB-Werts Null zurück (gemäß obigem Beispiel) und „NOT NULL“ für vbNull . Wenn Null funktioniert bei dir nicht, dann kann ich nichts dazu sagen, was falsch sein könnte...!

Ebenso sollten leere Strings genauso übergeben werden – ein leerer String, also str = "" -- wodurch usp_Bob "LEER" zurückgibt. Bei allem anderen wird 'NOT NULL AND NOT EMPTY' zurückgegeben (wie erwartet).

Wenn Sie NULL nicht durchlassen können, besteht eine andere Möglichkeit darin, einen leeren String im Sproc in NULL umzuwandeln – d. h.

IF @param = ''
    SET @param = NULL

Beachten Sie, dass die Länge, die Sie durchlaufen, keine allzu große Rolle spielen sollte. Es spiegelt die maximale Länge des Parameters wider, wie sie in SQL Server definiert ist, und nicht die Länge der Daten, die Sie durchlaufen.