2017-04-06 63 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

相关问题