0

我正在尝试使用 Visual C# 和 firebird / MySQL 作为数据库来开发聊天应用软件。

当客户端 A 发送消息时,我希望通知客户端 B。

如何从数据库通知客户端 B 消息正在等待?

假设我在数据库中创建了一个事件表,当对消息表进行插入时,我将如何在 C# 中捕获数据库生成的消息?

有人可以指导我应该在 C# 中使用什么代码来捕获数据库的通知并将其显示给客户端 B 吗?

4

1 回答 1

0

下面是一个非常简单的事件处理程序,它是从Firebird .NET - 使用示例复制/修改的

处理事件的类是FbRemoteEvent. 您在实例上注册您感兴趣的事件,并添加事件处理程序以在事件发生时得到通知。事件是异步通知的(尽管该示例没有清楚地说明这一点)。事件计数是自上次(已处理)事件通知以来的事件数。

为了简化示例,我使用了一个执行块来直接发布事件(而不是 - 例如 - 从触发器发布事件)。请注意,在此示例中,连接通知自己该事件,但如果通知来自不同的连接,它的工作方式完全相同:

class Program
{
    static void Main(string[] args)
    {
        FbConnectionStringBuilder cs = new FbConnectionStringBuilder();
        cs.DataSource = "localhost";
        cs.Database = @"TESTDATABASE.FDB";
        cs.UserID = "SYSDBA";
        cs.Password = "masterkey";
        cs.Charset = "NONE";
        cs.Pooling = false;

        FbConnection connection = new FbConnection(cs.ToString());
        connection.Open();

        FbRemoteEvent revent = new FbRemoteEvent(connection);
        revent.AddEvents(new string[] { "new_order" });

        // Add callback to the Firebird events
        revent.RemoteEventCounts += new FbRemoteEventEventHandler(EventCounts);

        // Queue events
        revent.QueueEvents();

        string sql = "EXECUTE BLOCK AS BEGIN POST_EVENT 'new_order'; END";

        FbCommand command = new FbCommand(sql, connection);

        for (int i = 0; i < 5; i++)
        {
            command.ExecuteNonQuery();
        }

        System.Threading.Thread.Sleep(2000);
        connection.Close();
        Console.ReadLine();
    }

    static void EventCounts(object sender, FbRemoteEventEventArgs args)
    {
        Console.WriteLine("Event {0} has {1} counts.", args.Name, args.Counts);
    }
}
于 2015-03-14T11:56:31.250 回答