2

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 を閉じる必要があるのはなぜですか?

ありがとう

4

1 に答える 1

3

最初の質問では、NonQuery を実行しているため、出力パラメーターを取得する前に閉じるリーダーはありません。

2 番目の質問については、そのままです。このコマンドでは、リーダーが開いている間、別のリーダーを呼び出すことはできません。

于 2010-04-13T19:38:01.220 に答える