C# 最好使用任务来防止UI冻结。现在是调查的好时机。另外,您可以使用using语句稍微清理一下代码。与前面的注释一致,您也可以尝试线程。我建议使用任务来防止UI冻结。现在是调查的好时机。另外,您可以使用using语句稍微清理一下代码。在前面的注释中,您也可以尝
C# 最好使用任务来防止UI冻结。现在是调查的好时机。另外,您可以使用using语句稍微清理一下代码。与前面的注释一致,您也可以尝试线程。我建议使用任务来防止UI冻结。现在是调查的好时机。另外,您可以使用using语句稍微清理一下代码。在前面的注释中,您也可以尝,c#,sql,visual-studio,ms-access,C#,Sql,Visual Studio,Ms Access,最好使用任务来防止UI冻结。现在是调查的好时机。另外,您可以使用using语句稍微清理一下代码。与前面的注释一致,您也可以尝试线程。我建议使用任务来防止UI冻结。现在是调查的好时机。另外,您可以使用using语句稍微清理一下代码。在前面的注释中,您也可以尝试线程化。因此,所有这些使用语句意味着我不必再为con.close、con.dispose等费心了?我是否也应该对我的sqlCmd对象执行同样的操作?@SafetyFish-正确。我错过了命令实例,但我更新了代码以反映该更改。在大多数情况下,不
最好使用任务来防止UI冻结。现在是调查的好时机。另外,您可以使用
using
语句稍微清理一下代码。与前面的注释一致,您也可以尝试线程。我建议使用任务来防止UI冻结。现在是调查的好时机。另外,您可以使用using
语句稍微清理一下代码。在前面的注释中,您也可以尝试线程化。因此,所有这些使用语句意味着我不必再为con.close、con.dispose等费心了?我是否也应该对我的sqlCmd对象执行同样的操作?@SafetyFish-正确。我错过了命令实例,但我更新了代码以反映该更改。在大多数情况下,不需要处理SqlCommand
,但最好是处理实现IDisposable
的所有类型。using
块为您做到了这一点,它确保在保留作用域时,类型被处理。@SafetyFish-要卸载该方法,请参见前面的答案:这也是一个非常有趣的答案。非常感谢,如果答案中的代码应该放在一个异步方法中,他或者需要在内部切换到异步方法,或者(可能)使用invoke来设置标签。所以所有这些使用语句意味着我不再需要为con.close、con.dispose等而烦恼了?我是否也应该对我的sqlCmd对象执行同样的操作?@SafetyFish-正确。我错过了命令实例,但我更新了代码以反映该更改。在大多数情况下,不需要处理SqlCommand
,但最好是处理实现IDisposable
的所有类型。using
块为您做到了这一点,它确保在保留作用域时,类型被处理。@SafetyFish-要卸载该方法,请参见前面的答案:这也是一个非常有趣的答案。多谢了,如果答案中的代码应该放在异步方法中,他需要在内部切换到异步方法,或者(可能)使用invoke来设置标签。
private void readWriteRefuseDay()
{
OleDbDataReader dr;
oCon = new OleDbConnection(oConStr);
sqlCon = new SqlConnection(sqlConStr);
oQuery = "SELECT UPRN, RefuseDay, RefuseWeek FROM RefuseDay";
sqlQuery = "INSERT INTO Ref_RefuseDay (UPRN, RefuseDay, RefuseWeek) VALUES (@UPRN, @RefuseDay, @RefuseWeek)";
oCmd = new OleDbCommand(oQuery, oCon);
string sUPRN;
string sRefuseDay;
Int32 iRefuseWeek;
try
{
oCon.Open();
sqlCon.Open();
count = 0;
lblProcessing.Text = count.ToString();
dr = oCmd.ExecuteReader();
while (dr.Read())
{
lblProcessing.Text = "Processing: RefuseDay " + count.ToString();
sUPRN = dr.GetString(0);
sRefuseDay = dr.GetString(1);
iRefuseWeek = dr.GetInt32(2);
sqlCmd = new SqlCommand(sqlQuery, sqlCon);
sqlCmd.Parameters.AddWithValue("@UPRN", sUPRN);
sqlCmd.Parameters.AddWithValue("@RefuseDay", sRefuseDay);
sqlCmd.Parameters.AddWithValue("@RefuseWeek", iRefuseWeek);
sqlCmd.ExecuteNonQuery();
count++;
}
dr.Close();
oCon.Close();
oCmd.Dispose();
oCon.Dispose();
sqlCon.Close();
sqlCmd.Dispose();
sqlCon.Dispose();
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
using (SqlConnection sqlCon = new SqlConnection(connectionString))
private async void button_Click(object sender, EventArgs e)
{
await readWriteRefuseDayAsync();
}
private async Task readWriteRefuseDayAsync() {
const string oQuery = "SELECT UPRN, RefuseDay, RefuseWeek FROM RefuseDay";
const string sqlQuery = "INSERT INTO Ref_RefuseDay (UPRN, RefuseDay, RefuseWeek) VALUES (@UPRN, @RefuseDay, @RefuseWeek)";
try {
using(var oCon = new OleDbConnection(oConStr))
using(var sqlCon = new SqlConnection(sqlConStr))
using(var oCmd = new OleDbCommand(oQuery, oCon))
{
await oCon.OpenAsync();
await sqlCon.OpenAsync();
count = 0;
lblProcessing.Text = count.ToString();
using(var dr = await oCmd.ExecuteReaderAsync())
{
while (await dr.ReadAsync())
{
lblProcessing.Text = "Processing: RefuseDay " + count.ToString();
var sUPRN = dr.GetString(0);
var sRefuseDay = dr.GetString(1);
var iRefuseWeek = dr.GetInt32(2);
using(var sqlCmd = new SqlCommand(sqlQuery, sqlCon))
{
sqlCmd.Parameters.AddWithValue("@UPRN", sUPRN);
sqlCmd.Parameters.AddWithValue("@RefuseDay", sRefuseDay);
sqlCmd.Parameters.AddWithValue("@RefuseWeek", iRefuseWeek);
await sqlCmd.ExecuteNonQueryAsync();
}
count++;
}
}
}
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}