2016-03-05 51 views
0

我有一個存儲過程,我希望它返回一列值的總和。當我使用SqlCommand時,我添加了參數enrollmentId。當我嘗試在Visual Studio中運行我的代碼時,它說我必須提供參數@totalEarned ...我的問題是,這是我使用SP來確定...它應該輸出@totalEarned。如何在不提供@totalEarned的情況下使用此SP?如何從ASP C#中的標量存儲過程獲取返回值?

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[totalEarned] 
    @enrollmentId Int, 
    @totalEarned int OUTPUT 
AS 
BEGIN 
    SELECT @totalEarned = SUM(pointsEarned) 
    FROM Assignments 
    WHERE enrollmentId = @enrollmentId 

    RETURN 
END 

這裏的C#代碼:

string connstring; 
connstring = ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString; 

SqlConnection conn = new SqlConnection(connstring); 

SqlCommand cmd = new SqlCommand("dbo.totalEarned", conn); 
cmd.Parameters.Add(new SqlParameter("@enrollmentId", enrollmentId)); 
cmd.Parameters.Add(new SqlParameter("@totalEarned", null)); 
cmd.CommandType = System.Data.CommandType.StoredProcedure; 

using (conn) 
{ 
    conn.Open(); 

    double totalEarned = (double)cmd.ExecuteScalar(); 
} 
+0

而不是使用的輸出,改變你回'回報@ totalEarned' –

+0

是啊,我意識到,但它仍然給我同樣的信息。 – ShoeLace1291

+0

也從SP參數中刪除它。在SQL中你根本不需要它@totalEarned,但是如果它使代碼更清晰,你可以將它作爲DECLARE。 –

回答

1

當你構建SqlParameter設置其Direction屬性Output

或者,直接簡單地SELECT SUM(pointsEarned)

2

您必須指定Direction。然後執行命令後

SqlParameter totalEarned= new SqlParameter("@totalEarned", SqlDbType.Int); 
totalEarned.Direction = ParameterDirection.Output; 
cmd.Parameters.Add(totalEarned); 

,將其轉換爲int來獲取值:替換cmd.Parameters.Add(new SqlParameter("@totalEarned", null));

int value = (int)totalEarned.Value; 
+0

這就是說ParameterDirection在當前上下文中不存在。 – ShoeLace1291

+0

使用完全限定的名稱:'System.Data.ParameterDirection.Output' – Kamyar

+0

現在它說對象引用未設置爲對象的實例。指的是int值=(int)totalEarned.Value; – ShoeLace1291

相關問題