我有一个程序,列出所有当前运行的进程在列表框中实时使用c#。我在把它插入mysql数据库时遇到了问题。我从process的线程列表框中检索数据,然后保存到数据库中。我有一个问题,当列表框刷新时,它会重复向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();
}发布于 2012-09-03 17:49:38
第一:从不在INSERT语句中使用字符串。总是使用 Parameters。
第二:这取决于这段代码的调用位置。如果在刷新事件中调用它,可能正确的做法是了解是否确实发生了更改,并且只有在肯定结果时才执行SQL查询。
发布于 2012-09-03 18:00:42
类似于(未测试):
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();
}
}https://stackoverflow.com/questions/12245443
复制相似问题