我正在尝试使用 Visual C# 和 firebird / MySQL 作为数据库来开发聊天应用软件。
当客户端 A 发送消息时,我希望通知客户端 B。
如何从数据库通知客户端 B 消息正在等待?
假设我在数据库中创建了一个事件表,当对消息表进行插入时,我将如何在 C# 中捕获数据库生成的消息?
有人可以指导我应该在 C# 中使用什么代码来捕获数据库的通知并将其显示给客户端 B 吗?
我正在尝试使用 Visual C# 和 firebird / MySQL 作为数据库来开发聊天应用软件。
当客户端 A 发送消息时,我希望通知客户端 B。
如何从数据库通知客户端 B 消息正在等待?
假设我在数据库中创建了一个事件表,当对消息表进行插入时,我将如何在 C# 中捕获数据库生成的消息?
有人可以指导我应该在 C# 中使用什么代码来捕获数据库的通知并将其显示给客户端 B 吗?
下面是一个非常简单的事件处理程序,它是从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);
}
}