这里的快速测试表明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.CloseEnd 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(根据上面的示例),使用VB值返回“ NOT NULL”
vbNull。如果
Null对您不起作用,那么我无法对可能出问题的地方发表评论……!
类似地,应该以空字符串的形式传递空字符串(即空字符串),即
str = ""usp_Bob返回“ EMPTY”。其他任何东西都会返回“ NOT NULLAND NOT EMPTY”(如预期)。
如果您无法传递NULL,则另一种选择是在sproc中将一个空字符串转换为NULL,即
IF @param = '' SET @param = NULL
请注意,您经过的长度不会太大。这反映了SQL Server中定义的参数的最大长度,而不是所传递的数据的长度。



