Я пытаюсь получить возвращаемое значение хранимой процедуры в SQL Server 2005 следующим образом:
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
Имеет ли какое-то отношение тот факт, что возвращаемое значение объявлено, а не передано в качестве параметра? Если так, как я могу получить возвращаемое значение параметра, объявленного после начала хранимой процедуры? Спасибо за вашу помощь.
UPDATE:
Я попробовал предложенные изменения и добавил следующую строку:
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();
, и я все еще получаю ту же ошибку.