C# 获取当前正在运行的进程
我有一个程序,它使用c#实时列出listbox中运行的所有当前进程。我在将其插入mysql数据库时遇到问题。我从进程的线程列表框中检索数据,然后保存到数据库。当列表框刷新时,我遇到了问题,因为它重复将相同的数据插入mysql数据库 有人能帮我吗 这是示例代码C# 获取当前正在运行的进程,c#,mysql,C#,Mysql,我有一个程序,它使用c#实时列出listbox中运行的所有当前进程。我在将其插入mysql数据库时遇到问题。我从进程的线程列表框中检索数据,然后保存到数据库。当列表框刷新时,我遇到了问题,因为它重复将相同的数据插入mysql数据库 有人能帮我吗 这是示例代码 foreach (String item in listBox1.Items) { cmd.CommandText = "SELECT * FROM sample"; MySqlDataReader msdr = cmd.E
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();
}
第一:决不在
INSERT
语句中使用字符串始终使用
第二:这取决于调用此代码的位置。如果在refresh事件中调用它,那么正确的做法可能是了解是否有实际更改的内容,并且只有在结果为正时才执行SQL查询 类似(未测试):
实际上,代码是在线程列表框中调用的。因此,当列表框刷新时,它会自动插入到数据库中。但不幸的是,我在刷新时得到了相同的数据。我的想法是首先从数据库中检索所有数据并与列表框项匹配。但事实似乎并非如此working@user1643284:将代码移动到某个命令中可能会更好,如按钮单击?我有一个示例代码,它获取实时运行的应用程序,如果应用程序正在运行,则它将进入列表框,当它关闭时,它将消失。我在堆栈溢出中得到了这段代码。在这一点上,最好至少运行一些进程,在每次更新时尝试检查刚刚得到的集合和以前的集合之间是否有一些差异。如果是,请运行update…我在这部分中得到一个错误bool found=((int)cmd.ExecuteScalar())>0是,我明白了。异常的描述文本说明了什么?如果没有错误的详细信息,我就无法提出太多建议。。。我已经测试了一个类似于我的数据库的项目…您的程序的明显问题是当您执行
if(items!=item)
时会发生什么,例如,如果数据库结果中的第一行包含一个不同的项目,您将在第二行(或第三行或第n行)向数据库中插入一个新项目数据库记录集的行中可能有相同的项。因此,这种情况将导致重复。
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();
}
}