2

我有一个程序可以使用 c# 实时列出所有当前在列表框中运行的进程。我在将其插入 mysql 数据库时遇到问题。我从进程的线程列表框中检索数据,然后保存到数据库。当列表框刷新时我遇到了问题,它重复将相同的数据插入到 mysql 数据库中。

有人可以帮我解决这个问题吗?

这是示例代码

foreach (String item in listBox1.Items)
{
    cmd.CommandText = "SELECT * FROM sample";
    MySqlDataReader msdr = cmd.ExecuteReader();

    while (msdr.Read())
    {
        var items = msdr["log"].ToString();
        if(items != item)
        {
            String query = "INSERT INTO sample values('','"+item+"')";
            cmd.CommandText = query;

            using(MySqlDataReader reader = cmd.ExecuteReader())
            {
                reader.Close();
            }
        }
    }
    msdr.Close();
}
4

2 回答 2

1

类似的东西(未测试):

foreach (String item in listBox1.Items)
{
    cmd.CommandText = "SELECT COUNT(*) as cnt FROM sample WHERE log = @log";
    cmd.Parameters.AddWithValue("@log", item)
    bool found = ((int)cmd.ExecuteScalar()) > 0

    if(!found)
    {

       String query = "INSERT INTO sample values('',@log)";
       cmd.CommandText = query;
       cmd.Parameters.AddWithValue("@log", item);
       cmd.ExecuteNonQuery();

    }  
}
于 2012-09-03T10:00:42.380 回答
1

第一: 永远不要INSERT在语句中使用字符串。始终使用参数

第二:这取决于调用此代码的位置。如果在刷新事件中调用它,可能正确的做法是了解实际是否发生了某些更改,并且仅在肯定结果时执行 SQL 查询。

于 2012-09-03T09:49:37.567 回答