sql – 如何使用ADO和VB将NULL或空字符串传递给存储过程输入参数
我在Sql Server 2005中有一个存储过程,其varchar输入参数定义为:
@Value varchar(24) = NULL 在我的VB6应用程序中,我尝试使用ADO函数设置参数: Set prmParamVal = cmdChkParam.CreateParameter(,adVarChar,adParamInput,Len(paramValue),paramValue) 如果我尝试传递的值是一个空(零长度)字符串,那么我得到以下错误:
我试图传递NULL值而不是空字符串,但这会导致不同的错误. 如何将空字符串或NULL值传递给存储过程? 我已经阅读了很多文章和搜索论坛(甚至多次发现我的问题),但没有正确的答案. 到目前为止空字符串的解决方法是设置length = 1或设置string =“”(空格).但那不是很好,我倾向于发送NULL.我还尝试将paramValue设置为vbNull,Null,vbNullString或设置prmParamVal.value = Empty而没有任何运气! 解决方法这里的快速测试表明,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",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传递,那么另一个选择是在sproc中将空字符串转换为NULL – 即, IF @param = '' SET @param = NULL 请注意,您通过的长度应该无关紧要.它反映了SQL Server中定义的参数的最大长度,而不是您传递的数据的长度. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |