📅  最后修改于: 2023-12-03 15:25:25.067000             🧑  作者: Mango
在进行数据读取时,若存在一个打开的DataReader对象,则一定要在使用新的DataReader对象之前将其关闭,否则就会出现'已经有一个与此命令关联的打开的 DataReader'的错误提示。
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
// do something
}
// Error: 已经有一个与此命令关联的打开的 DataReader 必须先关闭
SqlDataReader reader2 = cmd.ExecuteReader();
while (reader2.Read())
{
// do something
}
}
在使用完当前的DataReader对象后,调用Close
方法将其关闭。
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
// do something
}
reader.Close();
SqlDataReader reader2 = cmd.ExecuteReader();
while (reader2.Read())
{
// do something
}
}
NextResult
方法若需要在同一个SqlCommand对象中执行多个查询,则可以使用NextResult
方法跳转到下一个结果集,并在使用完当前结果集后将其关闭。
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
// do something
}
reader.NextResult();
while (reader.Read())
{
// do something
}
reader.Close();
}
在使用DataReader对象时,一定要注意关闭当前的DataReader对象,或使用NextResult
方法跳转到下一个结果集,并在使用完当前结果集后关闭,以避免出现'已经有一个与此命令关联的打开的 DataReader'的错误提示。