Обработка и 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
Re: Обработка и C#
От: SCS  
Дата: 28.11.02 11:43
Оценка:
Здравствуйте, Dr_Sh0ck, Вы писали:

DS>Есть у меня пара вопросов:

DS>
  • Как я понял, при возникновении ошибки (допустим — нарушение ограничения NOT NULL) при выполнении,
    DS>допустим, хранимой процедуры,[skip]. Но почему после этого
    DS>продолжает выполнять эта хранимая процедура
    так тебе же в процедуре возвращается код ошибки @@ERROR после каждого выполненого предложения. TSQL использует именно этот механизм, а не exception'ы, которые прерывают выполнение.

    DS>
  • На кой нужно @@ERROR, если все равно обработкой ошибок занимается СКЛ Сервер.
    вот для этого и надо,
    а вопрос здесь более правомочен: а при чем здесь framework ? SQL серверу глубоко по барабану на чем ты программирушь.

    когда выйдет Visual Studio for Yukon, вот тогда уж...
  • SCS
    Re[2]: Обработка и C#
    От: Dr_Sh0ck Беларусь  
    Дата: 30.11.02 04:09
    Оценка:
    Здравствуйте, SCS, Вы писали:

    DS>>
  • На кой нужно @@ERROR, если все равно обработкой ошибок занимается СКЛ Сервер.
    SCS>вот для этого и надо,
    SCS>а вопрос здесь более правомочен: а при чем здесь framework ? SQL серверу глубоко по барабану на чем ты программирушь.

    я имею ввиду почему нельзя каким нибудь оператором TSQL отключить в процедуре обработку ошибок SQL сервером.
  • Do not fake yourself ;)
    ICQ#: 198114726
    Re[3]: Обработка и C#
    От: SCS  
    Дата: 02.12.02 11:02
    Оценка:
    Здравствуйте, Dr_Sh0ck, Вы писали:
    DS>я имею ввиду почему нельзя каким нибудь оператором TSQL отключить в процедуре обработку ошибок SQL сервером.

    CREATE PROCEDURE dbo.AAA
    as
    ...
    if @@ERROR <> 0 
    BEGIN
      [обработка начатых транзакций]
      RETURN(1)
    END

    Чем не устраивает, ведь процедуры пишешь сам?
    SCS
    Re[4]: Обработка и C#
    От: Dr_Sh0ck Беларусь  
    Дата: 02.12.02 18:34
    Оценка:
    Здравствуйте, SCS, Вы писали:

    SCS>Здравствуйте, Dr_Sh0ck, Вы писали:

    DS>>я имею ввиду почему нельзя каким нибудь оператором TSQL отключить в процедуре обработку ошибок SQL сервером.
    SCS>
    SCS>
    SCS>CREATE PROCEDURE dbo.AAA
    SCS>as
    SCS>...
    SCS>if @@ERROR <> 0 
    SCS>BEGIN
    SCS>  [обработка начатых транзакций]
    SCS>  RETURN(1)
    SCS>END
    SCS>

    SCS>Чем не устраивает, ведь процедуры пишешь сам?

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