Всем привет!
Есть у меня пара вопросов:
Как я понял, при возникновении ошибки (допустим — нарушение ограничения NOT NULL) при выполнении,
допустим, хранимой процедуры, фреймовок преобразует это в исключение. Но почему после этого
продолжает выполнять эта хранимая процедура
create procedure dbo.AAA
as
raiserror('qwe', 16, 1)
--при инсерте произойдет ошибка
insert into Films (NAME) VALUES ('wer')
if @@ERROR <> 0
BEGIN
PRINT 'srewr'
END
SqlConnection connect = new SqlConnection("...");
SqlCommand comm = connect.CreateCommand();
comm.CommandText = "AAA";
comm.CommandType = CommandType.StoredProcedure;
try
{
connect.Open();
comm.ExecuteNonQuery();
}
catch( SqlException e )
{
MessageBox.Show(this, e.Message);
}
finally
{
connect.Close();
}
Выводится следующее:
qwe
Cannot insert the value NULL into column 'Country_ID', table 'Film.dbo.Films'; column does not allow nulls. INSERT
fails.
The statement has been terminated.
srewr
На кой нужно @@ERROR, если все равно обработкой ошибок занимается СКЛ Сервер. Я понимаю был бы
толе, если бы можно было отключить обработку ошибок СКЛ Сервером и "вручную", анализируя
содержимое @@ERROR, сигнализировать об ошибке.
Как я понял RAISERROR тоже фреймвоком преобразуется в SqlExeception. Но почему продолжается
выполнение хранимой процедуры?
Заранее спасибо.