Обработка и C#
От: Dr_Sh0ck Беларусь  
Дата: 28.11.02 10:58
Оценка:
Всем привет!
Есть у меня пара вопросов:
  1. Как я понял, при возникновении ошибки (допустим — нарушение ограничения 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

  2. На кой нужно @@ERROR, если все равно обработкой ошибок занимается СКЛ Сервер. Я понимаю был бы
    толе, если бы можно было отключить обработку ошибок СКЛ Сервером и "вручную", анализируя
    содержимое @@ERROR, сигнализировать об ошибке.
  3. Как я понял RAISERROR тоже фреймвоком преобразуется в SqlExeception. Но почему продолжается
    выполнение хранимой процедуры?

Заранее спасибо.
Do not fake yourself ;)
ICQ#: 198114726
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.