2014-02-07 132 views
0

我有一點問題。我的價值永遠是null。我不知道爲什麼。下面需要幫助存儲過程sql server 2008輸出參數c#

代碼:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[UsunTowar] 
    @id int output 
AS SET NOCOUNT ON 
BEGIN 
    if Exists (select top 1 Towar from Zamowienia where Towar = @id) 
     begin 
      set @id = 0 
     end 
    else 
     begin 
      delete from Towary where ID = @id 
      set @id = 1 
     end 
END 

現在C#:

con.Open(); 
SqlCommand cmd = con.CreateCommand(); 

cmd.CommandText = "EXECUTE UsunTowar @id"; 

cmd.Parameters.Add("@id", SqlDbType.Int).Value = id; 
cmd.Parameters["@id"].Direction = ParameterDirection.Output; 

cmd.ExecuteNonQuery(); 

string result = cmd.Parameters["@id"].Value.ToString(); 

con.Close(); 

字符串值'result'總是null。我嘗試了很多方法。返回值必須是01

代碼sql很好。請幫幫我。

+2

存儲過程不返回任何東西。你可以使用'select @ id'或'return @ id'作爲SP的最後一行來產生。如果你正在返回單個值,你也可以使用ExecuteScalar。 – Miller

+0

還有一件事。當行不存在時,您正試圖刪除它。所以在存在之前添加'NOT' – Miller

+0

我試過'select @ id'和'return @ id',但仍然'result'值爲null。這是非常重要的,我沒有任何想法。 –

回答

1

我用這個:

using(SqlConnection conn = new SqlConnection("myConnectionString")) 
    { 
     using(SqlCommand cmd = new SqlCommand("myStoredProcedure", conn)) 
     { 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.Add("@id", SqlDbType.Int).Direction = ParameterDirection.Output; 
      try 
      { 
       conn.Open(); 
       cmd.ExecuteNonQuery(); 
       // -1 if null 
       int id = 0; 
       if (!int.TryParse(cmd.Parameters["@id"].value, out id)) 
        id = -1; 
      } 
      catch 
      { 
       throw; 
      } 

     } 
    }