2010-01-21 67 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