【发布时间】:2013-12-24 10:38:43
【问题描述】:
我的应用程序运行一些可能需要很长时间的数据库查询。
在执行这些查询时,我的应用程序似乎冻结了,并且看起来应用程序已停止工作。
我需要使用进度条来避免这个问题,但我不确定如何预测查询执行所需的时间。
运行查询的代码如下
private void CheckSsMissingDate()
{
while (DateTime.Parse(time) <= DateTime.Now)
{
var ssCon = OpenSQLConnection();
var cmd = new SqlCommand("SELECT TOP (1)Date_Time,Value1,Value2,Value3,Value4,Value5,Value6,
"+ "Value7,Value8,Value9 from RAW_S001T01 where Date_Time >='" + tempTime + "'",ssCon);
var dr = cmd.ExecuteReader();
var count = 0;
while (dr.Read())
{
ssChkDate = (dr["Date_Time"].ToString());
conssChkDate = DateTime.Parse(ssChkDate).ToString("yyyy-MM-dd HH:mm:ss");
tempTime = Convert.ToDateTime(ssChkDate);
tempTime = tempTime.AddMinutes(15);
TValue1 = (dr["Value1"].ToString());
TValue2 = (dr["Value2"].ToString());
TValue3 = (dr["Value3"].ToString());
TValue4 = (dr["Value4"].ToString());
TValue5 = (dr["Value5"].ToString());
TValue6 = (dr["Value6"].ToString());
TValue7 = (dr["Value7"].ToString());
TValue8 = (dr["Value8"].ToString());
TValue9 = (dr["Value9"].ToString());
if (CheckMsMissingDate(conssChkDate) == false)
{
InsertMissing(conssChkDate,TValue1,TValue2,TValue3,TValue4,TValue5,TValue6,TValue7,TValue8,TValue9);
count = count + 1;
}
}
dr.Close();
ssCon.Close();
updateCount.Text = count + @" Missing Records added.";
}
}
如何显示一个进度条来显示查询的进度?
【问题讨论】:
-
首先要修复:使用参数化 SQL 而不是将日期包含为字符串...
-
查询可能锁定了应用程序,因为它运行在 UI 线程上,这段代码是直接从按钮调用的吗?首先考虑运行 Async 方法以避免锁定线程,然后考虑显示进度条。
-
将您的
IDisposables 包装成usings。
标签: c# sql multithreading progress-bar