C#聊天应用程序

时间:2013-11-08 12:26:26

标签: c#

你好,我有一个聊天应用程序,不明白我哪里出错了,我正在做的只是做一个计时器每秒更新消息,m iageva static int witch = 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;
}

3 个答案:

答案 0 :(得分: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列设为IDENTITY并让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;

答案 1 :(得分:0)

作为教程,我建议您视频C# chat application

您将回顾以下几点:

TCP / IP聊天

基本客户端/服务器

winforms IP地址

WCF

插座

它帮了我很多!

答案 2 :(得分:0)

我实际上不久前就是这样做的。而P2P是可行的方式。我不确定为什么你会希望将聊天记录保存到数据库中以供任何人查看。但是这里看看这个!

WCF Chat example