Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование RAISERROR 
:(
    Опции темы
Stalnoj
Дата 14.5.2005, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 20.10.2004

Репутация: 1
Всего: 2



Вопрос такой. Есть у меня триггер:

Код
CREATE     TRIGGER clients_trigger ON Clients 
FOR INSERT
AS 
INSERT INTO Clients_buffer SELECT *, SUSER_SID(), GETDATE() 
FROM inserted
RAISERROR('Операция вставки строки зафиксирована', 16, 1)


В котором при изменении таблицы Clients в таблицу Clients_buffer добавляется строка с информацией о добавленном клиенте, с пользователем, добавившем её и с временем добавления. Хотел бы также к триггеру припаять RAISEERROR (сейчас он может и не так тут важен, но суть не в этом).

Соответственно я создаю такой триггер. Когда в Query Analyzer'е добавляю новую строку в таблицу (INSERT INTO Clients VALUES (...)), мне (все нормально) выдается сообщение

Код
Server: Msg 50000, Level 16, State 1, Procedure clients_trigger, Line 11
Операция вставки строки зафиксирована


Так вот вопрос в следующем: если я добавляю строку из клиентского приложения, могу я как-нибудь получить этот RAISERROR из клиента? Насколько я понял RAISERROR нужен для того, чтобы проинформировать клиентское приложение об ошибке. Так вот как это обработать в клиенте? Клиент написан на C#.net
PM MAIL   Вверх
Stalnoj
Дата 17.5.2005, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 20.10.2004

Репутация: 1
Всего: 2



разобрался уже сам во всем. Напишу, может кому пригодится:

Если мы вызываем raiserror, к примеру, такого вида:

Код

raiserror( 'MyError', 1, 1)


то в программе (клиенте) мы можем его перехватить следующим образом:

Код

        public static int Main(string[] args)
        {
            SqlConnection sqlconnection1 = new 
SqlConnection("DataSource=angelsa-ri1;User Id=sa;Password=passw0rd;");
                 sqlconnection1.InfoMessage += new
SqlInfoMessageEventHandler(SqlConnection_OnInfoMessage);
            
            sqlconnection1.Open();
            SqlCommand sqlcommand1 = sqlconnection1.CreateCommand();
            sqlcommand1.CommandText = "Create procedure asb10 as raiserror(
'MyError', 1, 2) ";
            Int32 int321 = sqlcommand1.ExecuteNonQuery();    // -1
            sqlcommand1.CommandType = CommandType.StoredProcedure;
            sqlcommand1.CommandText = "asb10";
            Int32 int322 = sqlcommand1.ExecuteNonQuery();    // -1
            return 1;
        }
        

        public static void SqlConnection_OnInfoMessage(Object sender, SqlInfoMessageEventArgs e)
        {
            Console.WriteLine("InfoMessage Event: " + sender + ", " + e);
        }


В общем все дело в

Код

sqlconnection1.InfoMessage += new SqlInfoMessageEventHandler(SqlConnection_OnInfoMessage);


Но это только для raiserror, чей второй параметр меньше 10 (сообщения). Если же он больше 10, например:

Код

raiserror( 'MyError', 16, 1)


То это уже клиентом считается как ошибка, и вызывает исключение, которое можно примитивно обработать так:
Код

try
{
     sqlcommand1.ExecuteNonQuery();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);  
}


Информацию и примеры черпал: http://www.dotnet247.com/247reference/msgs/18/93680.aspx

Это сообщение отредактировал(а) Stalnoj - 17.5.2005, 16:35
PM MAIL   Вверх
np9mi7
Дата 8.6.2005, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

Репутация: нет
Всего: 10



если не .net а BCB, то можно так: RAISERROR & TADOConnection


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0841 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.