разобрался уже сам во всем. Напишу, может кому пригодится:
Если мы вызываем 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 |