2

のようなデータセットを作成します。

 System.Data.Common.DBConnection conn = getConn();
 DbCommand com = conn.CreateCommand();

 DbDataAdapter da = // get a datadapter from conn ??? There is NO CreateDataAdapter here ?
 da.SelectCommand = com;
 da.Fill(ds);

何か助けはありますか?

更新 - 回避策を探して、そこに CreateDataAdapter() メソッドがないことを知っています!

4

4 に答える 4

2

正しく理解しているかどうかはわかりません..しかし、おそらく次のようなものが必要です:

 using (System.Data.Common.DBConnection conn = getConn())
 {
  DbCommand com = conn.CreateCommand();
  DbDataAdapter da = CreateAdapter(com);
  // .. properties of adapter ..
  da.Fill(ds);
 }

編集(テストされていません):

次のような汎用の CreateAdapter メソッドを作成できます (コマンドの種類に基づいてアダプターを作成します)。

private static DbDataAdapter CreateAdapter<T>(T a_command) where T: DbCommand
{
     if (a_command is SqlCommand)
     {
        return new SqlDataAdapter();
     }

     // .. others adapters..

     return null;
}
于 2012-04-23T05:41:47.917 に答える
1

リフレクションの使用:

        DbConnection conn = getConn();
        string assemblyName = conn.GetType().Assembly.FullName;
        string typeName = conn.GetType().FullName.Replace("Connection", "DataAdapter"); // You may be more conservative than this
        DbDataAdapter adapter = (DbDataAdapter)Activator.CreateInstance(assemblyName, typeName).Unwrap();
于 2012-08-03T11:59:37.690 に答える
0

DbDataAdapter を使用する場合は、次のコンストラクターを実装する必要があると記載されています

見た目では、DbDataAdapter から継承し、直接使用するべきではないと思います。OledbDataAdapterを使用してみてください。

        OleDbConnection conn = getConn();
        OleDbCommand com = conn.CreateCommand();

        OleDbDataAdapter da = new OleDbDataAdapter(comm, conn);
        da.Fill(ds);
于 2012-04-23T04:43:10.190 に答える