2013-11-22 65 views
1

我DBA創建了他堅持在SQL Server中調用時工作正常,以下存儲過程:ADO.NET - 麻煩輸出參數

CREATE procedure [dbo].[GetParentID] 
    @SSHIP_AppID as varchar(50), 
    @ParentID as varchar(150) OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT @ParentID = a.iBuild_GUID 

    FROM dbo.XRef_iBuild_SSHIP as a 
    WHERE a.SSHIP_appId = @SSHIP_AppID 
    AND a.SSHIP_appId <> '' 
END 

我已經創建了下面的ADO.NET包裝,但我有麻煩獲取輸出參數。我不斷收回「OUTPUT」作爲它的值:

private string GetParentId(string appId) 
     { 
      var connection = new SqlConnection(); 
      string parentId = String.Empty; 
      try 
      { 
       connection.ConnectionString = "...) 
       var command = new SqlCommand("GetParentId", connection); 

       command.CommandType = CommandType.StoredProcedure; 

       command.Parameters.Add(new SqlParameter("@SSHIP_AppID", appId)); 

       command.Parameters.Add(new SqlParameter("@ParentID", ParameterDirection.Output)); 

       connection.Open(); 

       command.ExecuteNonQuery(); 

       parentId = (command.Parameters["@ParentId"].Value).ToString(); 
      } 
      catch (Exception ex) 
      { 
       LogError(appId, ex.ToString(), "Interface12 - Cannot get ParentId", null, 0); 
      } 
      finally 
      { 
       connection.Close(); 
      } 
      return parentId; 
     } 
    } 

我在做什麼錯?

+0

一個錯誤是command.Parameters [@ParentId「]應該是]」@ ParentID「]但我仍然得到相同的errot – user2471435

回答

1

new SqlParameter("@ParentID", ParameterDirection.Output)第二個參數被視爲object value參數,並且顯然轉換爲字符串。 (這個隱式轉換在我看來是ADO.NET中的一個設計缺陷,它應該爲任何未知的輸入類型引發一個異常)。

選擇更好的過載。