1)
在使用 SqlDataReader 时,关联的 SqlConnection 正忙于为 SqlDataReader 提供服务,除了关闭 SqlConnection 之外,无法对 SqlConnection 执行其他操作。在调用 SqlDataReader 的 Close 方法之前就是这种情况。例如,在调用 Close 之前,您无法检索输出参数。
如果上述声明为真,那么为什么以下方法能够在阅读器关闭之前从输出参数中检索值:
public int Something()
{
using (SqlConnection con = new SqlConnection(this.ConnectionString))
{
SqlCommand cmd = new SqlCommand("some_procedure", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@ID", SqlDbType.Int).Direction = ParameterDirection.Output;
con.Open();
cmd.ExecuteReader();
return (int)cmd.Parameters["@ID"].Value;
}
}
2)
您可以重置 CommandText 属性并重新使用 SqlCommand 对象。但是,您必须先关闭 SqlDataReader,然后才能执行新的或上一个命令。
为什么必须在执行新命令之前关闭 sqldatareader?
谢谢