0

SqlCommand の ExecuteNonQuery() と ExecuteReader() を抽象化する Database クラスがあります。ブロックを使用して Sqlconnection と SqlCommand をラップするため、CustomExecuteReader() が呼び出された後に SqlDataReader が閉じられるため、ビジネス レベル レイヤーで SqlReaderResultSet を読み取ることができません。以下のコード。フィードバックをありがとう。

public static SqlDataReader SqlReaderResultSet { get; set; }    

public static SqlDataReader CustomExecuteReader(string storedProc)
    {
        using (var conn = new SqlConnection(ConnectionString))
        {
            var cmd = new SqlCommand(storedProc, conn) {CommandType = CommandType.StoredProcedure};                

            try
            {
                conn.Open();
                SqlReaderResultSet = cmd.ExecuteReader();
            }
            catch (InvalidOperationException)
            {
                if (conn.State.Equals(ConnectionState.Closed))
                    conn.Open();
            }
            finally
            {                    
                conn.Close();
            }

        }
        return SqlReaderResultSet;
    }
4

3 に答える 3

11

「ビジネス レベル レイヤーで SqlReaderResultSet を読み取ることができません」 - そうすべきではありません。データは、低レベルのデータ アクセス構造を介してではなく、データ転送オブジェクトを使用して渡す必要があります。

于 2009-09-16T11:33:50.343 に答える
4

上記の方法でデータリーダーのレコードを反復処理し、オブジェクトのリストを作成するようにアプローチを変更することをお勧めします。そのオブジェクトのリストは、返されて処理されるべきものです。

于 2009-09-16T11:35:29.560 に答える