AseConnection InfoMessage 返回打印语句作为错误消息

AseConnection InfoMessage returning print statement as an error message

我在 Sybase ASE 15.7 中工作,我正在尝试 return 来自 T-SQL 的消息,如下所示。我正在使用 AseConnection.InfoMessage 事件处理程序从数据库中捕获消息。它工作正常,但它也 return 打印语句作为 AseError 消息。为什么会发生这种情况,我该如何纠正?

控制台输出:

Log: 12522 rows in SomeTable

AseError Log: 12522 rows in 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();
   }
}

这只是驱动程序作者的一个非常奇怪的设计决定。所有消息、错误和信息共享一个将消息描述为 AseError.

的数据结构

我从事一个开源项目,该项目产生 AseClient.NET Core version。该项目的目标之一是 drop-in 替代 SAP/Sybase 的驱动程序 - 因此我们复制了上述设计决策 - 虽然很奇怪。

严重性 >10 被视为错误。否则,它被认为是信息性的。如果它能帮助您理解它,这里是我们解释服务器消息的代码:MessageTokenHandler.cs