2010-01-21 62 views
4

当调用存储过程,我串联值加在一起,我的问题是你如何调用存储过程,但在PARAMS的一个发送“NULL”价值?调用存储过程,传递NULL值,处理布尔值

可以说AID = null,但是如果我将它传递给我的查询,我会得到一个错误?!

QueryConn.Execute("Search_Res " & Count & "," & AccessList("InvoiceLevel") & "," & AID) 

好的,所以我的下一个问题是如何传递一个布尔变量?

在我的存储过程中的无功@SearchChildren是真或假,但我要如何定义这个或者我应该去一个int,让事情变得简单了自己,只使用0或1?

MS SQL Server 2005的

回答

1

更改Search_Res存储过程的参数是可选。 @parameter = NULL。当传递NULL值时,参数被忽略。

CREATE PROCEDURE dbo.foo 
    @param INT = NULL 
AS 
BEGIN ... 
+1

其实这是我使用的答案的基础,所以我得到'剔'。 感谢大家回答。 – flavour404 2010-01-22 02:44:33

0

在这种情况下,因为你是在传递过程调用和参数作为文字你想AID包含字符串值“零”,而不是一个空值。

或者,您应该考虑使用绑定参数。它看起来像你的调用语言是VB.NET,所以我不完全知道如何使用该语言,但是有很多参考。

我没有使用SQL Server中,但我知道,在甲骨文它基本上是非法的布尔变量传递到存储过程。建议使用INT值为0或1的值。

7

它看起来像你想使用即席查询,而不是一个ADO.Net DbCommand对象执行的SP。你不能只添加“@SearchChildren = null”到你的字符串吗?

您也可以使用命令对象显式设置参数值,它相对简单。

SqlCommand cmd = new SqlCommand("Search_Res", QueryConn); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.AddWithValue("@SearchChildren", DBNull.Value); 
.. 
.. 
values = cmd.Execute(); 

对不起C#......我的VB很生锈。

+0

+1为了添加参数到命令对象 – 2010-01-21 21:52:31

+0

我喜欢这个,它干净:) – flavour404 2010-01-22 02:44:01