2012-08-29 90 views
3

我有一個簡單的SQL Server存儲過程:初始化存儲過程的輸出參數

ALTER PROCEDURE GetRowCount 

(
@count int=0 OUTPUT 
) 

AS 
Select * from Emp where age>30; 
SET @[email protected][email protected]@ROWCOUNT; 

RETURN 

我試圖初始化並在下面的C#代碼訪問的輸出參數:

SqlConnection con = new SqlConnection(); 
con.ConnectionString = "Data Source=localhost\\SQLEXPRESS;Initial Catalog=answers;Integrated Security=True"; 

SqlCommand cmd = new SqlCommand(); 
cmd.Connection = con; 

cmd.CommandText = "GetRowCount"; 
cmd.Parameters.Add(new SqlParameter("@count", SqlDbType.Int)); 
cmd.Parameters["@count"].Direction = ParameterDirection.Output; 
con.Open(); 
cmd.Parameters["@count"].Value=5; 
cmd.ExecuteNonQuery(); 

int ans = (int)(cmd.Parameters["@count"].Value); 
Console.WriteLine(ans); 

但在運行代碼,第InvalidCastException被引發到代碼的第二行(我調試並檢查沒有任何內容在Value屬性中返回)。

如何正確地初始化代碼中的輸出參數?提前致謝!

+0

可能重複(http://stackoverflow.com/questions/12174399/accessing-sql-server-stored-procedure-output -in-c-sharp) – podiluska

+1

我是一個小時前問過這個問題的人,但這是一個完全不同的問題 – ankit0311

回答

1

您不必初始化output參數。使用ParameterDirection.InputOutput將值傳遞給存儲過程。

類型異常的最可能原因是該過程返回DBNull.Value。您可以測試,如:[訪問SQL Server存儲過程的輸出參數在C#]的

var ans = cmd.Parameters["@count"].Value as int?;