2017-04-06 62 views
0

我試圖讓OUTPUT參數工作,但無論什麼原因,它拒絕。結果我一直得不到結果。如果我在SQL方面做了所有事情,它就可以正常工作。我測試了這個樣子,如何將一個值作爲OUTPUT參數返回?

DECLARE @test INT 
EXEC MyProc @number = 1, @id = @test 
PRINT @test 

這給我的輸出正是我的預期。我已經看了這個代碼一個小時,它看起來正確。可能的原因是ID10T錯誤,但我的大腦只是沒有看到它。

public static int MyFunc(int id) 
{ 
    using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["cnString"].ConnectionString)) 
    { 
     connection.Open(); 

     using (var cmd = new SqlCommand("dbo.MyProc", connection) 
     { 
      CommandTimeout = 120, 
      CommandType = CommandType.StoredProcedure 
     }) 
     { 
      cmd.Parameters.AddWithValue("@number", SqlDbType.Int); 
      var param = new SqlParameter("@id", SqlDbType.Int) 
      { 
       Direction = ParameterDirection.Output 
      }; 
      cmd.Parameters.Add(param); 
      cmd.ExecuteNonQuery(); 

      Debug.WriteLine(param.Value); 

      return Convert.ToInt32(param.Value); 
     } 
    } 
} 

ALTER PROCEDURE dbo.MyProc 
(
    @number INT , 
    @id INT OUTPUT 
) 
AS 
    BEGIN 
     SET NOCOUNT ON; 
     SET @id = (
          SELECT Id 
          FROM SomeTable 
          WHERE SomeValue = @number 
          ); 
     RETURN; 
    END; 
+0

嘗試command.executescalar(),而不是 –

+0

@JoeC沒有運氣 – Yatrix

+1

你逝去的類型,而不是價值添加參數時。僅供參考 - 查看本文http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/ –

回答

2

你有一個簡單的拼寫錯誤...

你逝去的是你期待的,而不是參數MYFUNC的SqlDbType.Int的價值。

cmd.Parameters.AddWithValue("@number", SqlDbType.Int); 

應該

cmd.Parameters.AddWithValue("@number", id); 
+0

哦。親。神。就像我說的那樣,這是一個'ID10T'錯誤! – Yatrix

+0

我知道這是如何工作的,謝謝。 ;) – Yatrix

-1

你可以試試這個:

cmd.Parameters.AddWithValue("@number", SqlDbType.Int).Value = id; 
cmd.Parameters.Add(param).Value = id 
+0

'cmd.Parameters.AddWithValue(「@ number」,SqlDbType.Int)'這是問題代碼。你所做的是將值設定兩次,一次不正確,然後用正確的答案覆蓋它。 – Yatrix

相關問題