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

5

.NET Framework 4.5 中的新功能GetFactory(DbConnection)::

public static DbDataAdapter CreateDataAdapter(DbConnection connection)
{
   DbProviderFactory factory = null;
   factory = DbProviderFactories.GetFactory(connection);

   if (factory == null)
         throw new ArgumentException("Could not locate factory matching supplied DbConnection", "connection");

   return factory.CreateDataAdapter();
}

也可以看看

注意:任何代码都会发布到公共领域。无需归属。

于 2013-10-01T21:29:04.073 回答
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 回答