【发布时间】:2020-05-14 12:18:20
【问题描述】:
private void comT_SelectedIndexChanged(object sender, EventArgs e)
{
if (comT.SelectedIndex != -1)
{
SqlCommand cmd = new SqlCommand(@"SELECT ISNULL(substring(MAX(tCode),3,2),'00')
FROM Teacher
WHERE dCode = '" + comT.SelectedValue.ToString() + "'", MUControlClass.con);
SqlDataReader dr = cmd.ExecuteReader();
dr.Read(); <--HERE IS ERROR **"ExecuteReader requires an open and available Connection. The connection's current state is closed."**
if (dr[0].ToString() != "00")
{
int dugaar = Convert.ToInt32(dr[0]) + 1;
if (dugaar > 9)
{
msk.Text = comT.SelectedValue.ToString() + dugaar.ToString();
}
else
msk.Text = comT.SelectedValue.ToString() + "0" + dugaar.ToString();
}
else
{
msk.Text = comT.SelectedValue.ToString() + "01";
}
dr.Close();
}
}
ExecuteReader 需要一个打开且可用的连接。连接的当前状态为关闭。错误
【问题讨论】:
-
错误信息非常清楚。
MUControlClass.con未打开。 -
您可能应该使用
using {...}块进行查询调用,并在这样做时始终创建新连接。有关示例,请参见 in a “using” block is a SqlConnection closed on return or exception?。 -
这看起来很可疑,就像您正在尝试跨多个方法共享单个连接对象。这通常是错误的做法。共享连接 string 但不共享连接对象。而是创建接近使用的对象。
标签: c#