Я выполняю запрос Insert
. Я хочу вернуть элемент идентификации. Я также использую эту же хранимую процедуру. Внутри другой хранимой процедуры, чтобы вернуть элемент идентификации.Выберите идентификатор области из Sql
Alter Proc Proc1
@name varchar(10),
@value int
As
Begin
insert into Table1
values (@name, @value)
return SCOPE_IDENTITY()
C# код:
У меня есть метод, чтобы назвать мою базу данных каждый раз, так что я использую, что
_database.StoredProcedure = "Proc1";
_database.parameter("name","michael");
_database.parameter("value",10);
int id = Convert.ToInt32(_database.ExecuteScalar());
Здесь я получаю ID = 0 каждый раз // BUG
SQL Другие хранимые процедуры:
Alter Proc2
// Some other logic
Execute @id = Proc1 @name, @value // THIS WORKS
Теперь, если я меняю последнюю строку PROC1, чтобы Select SCOPE_IDENTITY()
из RETURN SCOPE_IDENTITY()
затем # код работает C, но Proc2 возвращает 0.
Что я должен сделать так, чтобы он работает в C# код и в proc2 также.
Я думал о выходном параметре, но я не знаю, как бы назвать его с помощью этого метода базы данных в C#.
никогда не использовать возврат за все, кроме кода ошибки или кода состояния, другими словами, он предназначен только для метаданных. Вы должны использовать выходную переменную в любое время, когда вы возвращаете фактические данные из таблицы базы данных. – HLGEM
Возможный дубликат [Параметр возвращаемого значения SqlCommand] (http://stackoverflow.com/questions/12885818/sqlcommand-return-value-parameter) – Taekahn
@Steve Если я делаю, выберите SCOPE_IDENTITY(), **, тогда идентификатор Proc2 из Proc2 возвращает 0. ** –