0

您好,我有一个聊天应用程序,但不明白我哪里出错了,我所做的只是每秒做一个计时器,它会更新消息,m iageva static int wwitch = 1 或 = 0 来更新消息.. 当他们发送一个新消息将其更新为 1 代码很奇怪,有时我两次收到所有消息,或者有时他们不发送我只是想知道是否有任何其他方式可以做到这一点,例如教程或建议我的代码:

我在按钮前插入消息的代码!!

using (SqlDatabaseClient client = SqlDatabaseManager.GetClient())
{
    int id = int.Parse(client.ExecuteScalar("SELECT COUNT(*) FROM program_messages").ToString());
    client.SetParameter("id", id + 1);
    client.SetParameter("sender", mUsername);
    client.SetParameter("message", textBox1.Text);
    client.SetParameter("timesent", DateTime.Now);
    client.ExecuteNonQuery("INSERT INTO program_messages (`id`,`sender`,`message`,`timesent`) VALUES (@id,@sender,@message,@timesent)");
}
updateneeded = 1;

我的刷新消息代码

using (SqlDatabaseClient client6 = SqlDatabaseManager.GetClient())
{
    int id = int.Parse(client6.ExecuteScalar("SELECT COUNT(*) FROM program_messages").ToString());
    int finalcount = listBox2.Items.Count;
    foreach (DataRow row2 in client6.ExecuteQueryTable("SELECT * FROM program_messages").Rows)
    {
        if (updateneeded > 0)
        {
            if (!listBox2.Items.Contains((string)row2["sender"] + ": " + (string)row2["message"]))
            listBox2.Items.Add((string)row2["sender"] + ": " + (string)row2["message"]);
        }
    }
    updateneeded = 0;
}
4

3 回答 3

0

这可能是罪魁祸首:

using (SqlDatabaseClient client = SqlDatabaseManager.GetClient())
{
    int id = int.Parse(client.ExecuteScalar("SELECT COUNT(*) FROM program_messages").ToString());
    client.SetParameter("id", id + 1);
    // ...
    client.ExecuteNonQuery("INSERT INTO program_messages (`id`,`sender`,`message`,`timesent`) VALUES (@id,@sender,@message,@timesent)");
}
updateneeded = 1;

您应该将该id列设为 anIDENTITY并让 SQL 处理它。这样,您可以删除第一SELECT条语句并执行单个查询。此外,您还应该创建timesent自动生成的值(通过GETDATE()),以便在所有客户端之间保持一致。

您的代码将变为:

using (SqlDatabaseClient client = SqlDatabaseManager.GetClient())
{
    client.SetParameter("sender", mUsername);
    client.SetParameter("message", textBox1.Text);
    client.ExecuteNonQuery("INSERT INTO program_messages ('sender','message','timesent') VALUES (@sender,@message,GETDATE())");
}
updateneeded = 1;
于 2013-11-08T12:35:36.327 回答
0

作为教程,我建议您使用视频C# 聊天应用程序

您将了解以下几点:

TCP/IP 聊天

基本客户端/服务器

winform IP地址

wcf

插座

这对我帮助很大!

于 2013-11-08T12:35:51.687 回答
0
于 2013-11-08T12:41:53.767 回答