AseConnection InfoMessage, возвращающий оператор печати в виде сообщения об ошибке - PullRequest
1 голос
/ 20 марта 2019

Я работаю в Sybase ASE 15.7 и пытаюсь вернуть сообщения из T-SQL, как показано ниже. Я использую обработчик событий AseConnection.InfoMessage для захвата сообщений из базы данных. Он работает нормально, но также возвращает оператор печати в виде сообщения AseError. Почему это происходит и как я могу это исправить?

Выход на консоль:

Журнал: 12522 строк в SomeTable

AseError Log: 12522 строки в SomeTable

string sql= @"set nocount on
              declare @rowcount    int                            
              select  @rowcount = count(*) from SomeTable
              print   'Log: %1! rows in SomeTable', @rowcount";

using (var conn = GetOpenConnection(connectionString))
{
   conn.InfoMessage += (s,e) =>
   {
      Console.WriteLine(e.Message);
      foreach (var error in e.Errors)
         Console.WriteLine(error.ToString())
   };
   using (var command = new AseCommand(sql, conn))
   {
      command.ExecuteNonQuery();
   }
}

1 Ответ

1 голос
/ 18 июня 2019

Это просто действительно причудливое дизайнерское решение авторов драйвера. Все сообщения, ошибки и информация имеют общую структуру данных, которая описывает сообщение как AseError.

Я работаю над проектом с открытым исходным кодом, который создает .NET Core версию из AseClient. Одной из целей этого проекта является быстрая замена драйвера из SAP / Sybase - и по этой причине мы повторили вышеупомянутое дизайнерское решение - как ни странно.

Серьезность >10 считается ошибкой. В противном случае это считается информационным. Если это поможет вам разобраться в этом, вот наш код для интерпретации сообщений сервера: MessageTokenHandler.cs

...