我创建了一个构造函数方法来执行sqldatareader以避免重新输入sqlconnection但是当我使用它时出错:
public SqlDataReader ExecuteCommand(string cmdText, CommandType cmdType)
{
SqlDataReader dr = null;
using (SqlConnection conn = new SqlConnection(ConnString))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = cmdText;
cmd.CommandType = cmdType;
try
{
if (conn.State != ConnectionState.Open)
{
conn.Open();
dr = cmd.ExecuteReader();
}
}
catch(Exception e)
{
}
finally
{
dr.Dispose();
conn.Close();
}
}
return dr;
}
我尝试使用它,但错误发生:
SqlDataReader dr = ExecuteCommand("Select * from EmployeeInfo where Employeeid = 2", CommandType.Text);
textBox1.Text = dr[1].ToString();
错误是:
读取器关闭时无效尝试调用CheckDataIsReady。
只需考虑您的计划的步骤:
try
{
if (conn.State != ConnectionState.Open)
{
conn.Open();
dr = cmd.ExecuteReader();
}
}
首先,你正确地打开连接并执行命令 - 一切都很好!
finally
{
dr.Dispose();
conn.Close();
}
接下来你的代码命中了finally块 - 你(尝试)处理读取器并关闭连接!再也没有错。接下来是你的问题:
return dr;
...
textBox1.Text = dr[1].ToString();
您返回一个封闭的阅读器,然后尝试从中读取 - 这会导致您收到的错误。恕我直言,我想到了两种可能的解决方案: