【发布时间】:2021-03-09 20:04:25
【问题描述】:
在表单加载时,下面的代码运行良好。它以在计时器(5 秒间隔)上运行的方法运行代码。
我注意到它会在 DataGridView 中引发错误之前填充 2 行。 不确定为什么会抛出“阅读器关闭错误时尝试读取无效”。
public void reloadDg()
{
dg.Rows.Clear();
dg.Refresh();
try
{
TSID_POS = 0;
conn.Open();
using (var cmd = new MySqlCommand("SELECT * FROM table", conn))
{
using (MySqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
if (Convert.ToInt32(reader.GetString(0)) > TSID_POS)
{
TSID_POS = Convert.ToInt32(reader.GetString(0));
}
PartInfo[0] = reader.GetString(0);
PartInfo[1] = reader.GetString(1);
PartInfo[2] = reader.GetString(2);
PartInfo[3] = reader.GetString(3);
PartInfo[4] = reader.GetString(4);
PartInfo[5] = reader.GetString(5);
PartInfo[6] = reader.GetString(6);
PartInfo[7] = reader.GetString(7);
this.ListParts.Rows.Insert(0, reader.GetString(0),
reader.GetString(1),
reader.GetString(2),
reader.GetString(3),
reader.GetString(4),
reader.GetString(5),
reader.GetString(6),
reader.GetString(7));
}
reader.Close();
reader.Dispose();
}
conn.Close();
conn.Dispose();
AR = 1;
}
}
catch (Exception ex)
{
MessageBox.Show("Error:" + ex);
}
}
【问题讨论】:
-
为什么不在这里创建带有
using语句的MySqlConnection实例,出于多种原因,这是最佳实践?你把它放在这里看起来不对。那么你在哪里创建一个新的连接呢?您不能使用已释放的连接。 -
没有必要对
using语句中的内容调用Dispose()。 -
您也可以投票赞成接受的答案:)