0

次の汎用データ アクセス関数 (ADO.NET、C# または VB、SQLServer または OLEDB) をコーディングする最良の方法は何ですか?

  1. 接続で SQL を実行する
  2. DataReader を開く
  3. DataSet を開きます (これに関するアイデアはありますか?)

プログラムのどこからでもこれらの関数を呼び出すことができるようにします。これらの機能に直接適用されない限り、データ アクセス パターンやデータ アクセス レイヤーには興味がありません。(つまり、接続またはリーダー/データセットを自動的に閉じるパターン)

使用例

ExecuteSQL("UPDATE tblTest SET x = 5 WHERE [ID] = 4")

rdr を OleDb.OleDbDataReader = OpenReader("SELECT * FROM tblExecute") として使用する
  rdr.Read() 中

  終了
使用終了

関数の例

    Public Function ExecuteSQL(ByVal strSQL As String) As Boolean
        cn を新しい OleDb.OleDbConnection(strConn) として使用する
            cn.Open()
            cmd を新しい OleDb.OleDbCommand(strSQL, cn) として使用する
                cmd.ExecuteNonQuery() > 0 を返します
            使用終了
        使用終了
        偽を返す
    終了機能

    Public Function OpenReader(ByVal strSQL As String) As OleDb.OleDbDataReader
        Dim cn As New OleDb.OleDbConnection(strConn)
        cn.Open()
        cn.State = ConnectionState.Open の場合
            Dim cmd As New OleDb.OleDbCommand(strSQL, cn)
            cmd.ExecuteReader(CommandBehavior.CloseConnection) を返します。
        そうしないと
            新しい例外をスロー ("データベースに接続できません。")
        終了条件
    終了機能

4

2 に答える 2

1

これは、ジェネリック リストとラムダを指定して、IDataReader から読み取ったオブジェクトをリストに設定する Fill メソッドです

public static void Fill<T>(this IDbCommand cmd,
    IList<T> list, Func<IDataReader, T> rowConverter)
{
    using (var rdr = cmd.ExecuteReader())
    {
        while (rdr.Read())
        {
            list.Add(rowConverter(rdr));
        }
    }
}

次のように使用します。

// var cmd = new SqlCommand(...);
// var things = new List<Thing>();
cmd.Fill(things, r => new Thing { ID = r.GetInt32(0), Name = r.GetString(1) });

その ExecuteReader と Read ループをこのように 1 行にまとめることができるのは本当に便利です。

于 2008-12-21T23:33:36.817 に答える
1

それだけで十分な場合は、投稿したコードで十分です。何が最善かというと…まあ、それらの「データ アクセス パターン」の 1 つを使用することをお勧めします。しかし、これは機能し、これ以上言うことはありません。必要に応じて、ExecuteScalar などの他の関数を追加します。

基本的に文字列を使用しているだけです.SQLを連結または構築している場合、それは非常に悪いことです. それを行っている場合は、実際にはパラメーター化されたクエリを使用し、関数を拡張してパラメーター コレクションなどを使用する必要があります。

于 2008-12-21T23:34:28.657 に答える