我想如下檢索存儲過程在SQL Server 2005中的返回值:在C#中的存儲過程的返回值返回錯誤
OleDbCommand comm = new OleDbCommand(process_name, connection);
comm.CommandType = CommandType.StoredProcedure;
for (int i = 0; i < process_parameters.Length; i++)
comm.Parameters.AddWithValue(process_parameters[i].ParameterName, process_parameters[i].Value);
//Add output param
comm.Parameters.Add("@TestID", OleDbType.Integer).Direction = ParameterDirection.ReturnValue;
comm.ExecuteNonQuery();
當的ExecuteNonQuery()被調用,但是,我找回OleDbException說:「過程或函數myStoredProcedure指定的參數太多。」我的存儲過程開始,如下所示:
ALTER PROCEDURE [dbo].[spTabtempTestsINSERT]
(
@Param1 char (64),
@Param2 char (128),
@Param3 char (64),
)
AS
BEGIN
Declare @TestID int
而且具有以下結尾:
RETURN @TestID
END
這是否將返回值聲明,而不是作爲一個參數傳遞的事實,有什麼關係用它?如果是這樣,我怎麼能得到存儲過程開始後聲明的參數的返回值?謝謝你的幫助。
更新: 我試過到目前爲止建議的修改,添加以下行:
OleDbCommand comm = new OleDbCommand(process_name, connection);
comm.CommandType = CommandType.StoredProcedure;
for (int i = 0; i < process_parameters.Length; i++)
comm.Parameters.AddWithValue(process_parameters[i].ParameterName, process_parameters[i].Value);
var testID = (int)comm.ExecuteScalar();
現在,當ExecuteScalar()
被執行,我得到一個的NullReferenceException與對象引用不設置到對象實例。
注:我也嘗試將其設置爲一個整數int testID = (int)comm.ExecuteScalar();
,我仍然得到相同的錯誤。
如果存在實際上是一個OUTPUT參數在proc定義中,那麼他可以使用ExecuteNonQuery並只讀取新的參數值。但是,OP有點混亂 – NotMe 2010-11-24 23:10:46