यहां एक त्वरित परीक्षण से पता चलता है कि 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 ने VB मान का उपयोग करने के लिए 'NULL' लौटाया Null
(उपरोक्त नमूने के अनुसार), और vbNull
. के लिए 'NOT NULL' . अगर Null
आपके लिए काम नहीं करता है, तो मैं इस पर टिप्पणी नहीं कर सकता कि क्या गलत हो सकता है...!
इसी तरह, खाली स्ट्रिंग्स को उसी तरह से पास किया जाना चाहिए - एक खाली स्ट्रिंग, यानी str = ""
-- जो usp_Bob को 'खाली' लौटाता है। किसी और चीज में यह 'नॉट न्यूल और नॉट एम्प्टी' (उम्मीद के मुताबिक) लौटाता है।
यदि आप NULL को पास नहीं करवा सकते हैं, तो दूसरा विकल्प यह है कि स्पोक में एक खाली स्ट्रिंग को NULL में डाला जाए - यानी,
IF @param = ''
SET @param = NULL
ध्यान दें कि आप जिस लंबाई से गुजरते हैं वह बहुत अधिक मायने नहीं रखती है। यह उस डेटा की लंबाई के बजाय SQL सर्वर में परिभाषित पैरामीटर की अधिकतम लंबाई का प्रतिबिंब है, जिससे आप गुजर रहे हैं।