1)
SqlDataReader が使用されている間、関連付けられた SqlConnection は SqlDataReader を提供するためにビジー状態であり、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 を閉じる必要があるのはなぜですか?
ありがとう