【发布时间】:2017-03-09 16:16:21
【问题描述】:
以下代码用于从 Access DB 读取并传输到 SQL DB。
谁能告诉我为什么这段代码在运行后就挂了?
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))
例如。从来没有真正明白这一点。好点吗 ?我也看到它用于 SqlCommand 对象。
这段代码有什么可以改进的,让我们来听听。
提前致谢。
【问题讨论】:
-
我建议使用任务来防止 UI 冻结。 msdn.microsoft.com/en-us/library/dd537609(v=vs.110).aspx
-
现在是查看async/await 的好时机。此外,您可以使用
using语句来清理您的代码 -
按照之前的cmet,你也可以试试threading。
标签: c# sql visual-studio ms-access