我的概念是例如here[COU] =45
,然后进度条加载该计数并希望显示已成功完成。
但我没有得到同步的进展与此处的计数并且也没有显示消息,请帮我做,我的代码如下所示
public void proget()
{
System.Data.DataRowView selectedFile =
(System.Data.DataRowView)dataGrid1.SelectedItems[i];
string iid = Convert.ToString(selectedFile.Row.ItemArray[10]);
SqlConnection con = new SqlConnection("Data Source=TNT3FMR\\SQLEXPRESS;Initial Catalog=xxx;Integrated Security=True");
string query = "SELECT [COU] FROM _Count_Series WHERE STUID='"+iid+"'";
SqlCommand cmd = new SqlCommand(query, con);
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
progressBar1.Value++;
}
MessageBox.Show("Completed Successfully");
}
答案 0 :(得分:2)
我不确定你的设计是否正确。最佳实践说,您应该在连接的方案中尽快关闭数据库连接。这意味着首先读取数据并在处理之前丢弃读取器。你在做什么对我来说有点奇怪。
我在你的代码中注意到的一个问题是你通过连接字符串来动态构建查询。这可以让您了解SQL注入攻击。你应该使用参数化查询。
另一个问题是你没有使用'使用模式'。如果在连接时出错,会发生什么?连接资源是如何发布的?
根据我的个人经验,当我访问数据库时,我以异步方式执行此操作并将progressBar设置为不确定状态,因为我不知道读取数据需要多少。你的代码是同步的。这可能是您的UI无法正确更新的部分原因。
希望这会有所帮助