2009-10-12 148 views
0

这里的情景:C#:支持多种类型的数据库表与适配器

我希望能够同时支持的SQL Server CE和SQL Server使用强类型DataSet 200X数据库。

我得到的问题是它使用特定类型的连接(SqlConnection或SqlCeConnection)进行编译,因此我无法在运行时将类型更改为任何IDbConnection对象。

我是否从Visual Studio生成的数据集要求太多?如果没有,那么让它起作用有什么窍门?

回答

1

很久以前,我放弃了使用设计器生成的TableAdapters。控制他们所做的事情并不容易,没有简单的方法来改变他们所有的连接字符串......当然,没有办法让他们与不同的ADO.NET提供者一起工作,因为提供者很难实现,在生成的代码中进行编码。 TableAdapter甚至不会继承一个通用的基类,所以你可以编写通用代码(当然,它们是从组件继承而来的,但是这很没用......)

相反,我使用自己的自制“TableAdapter”生成器。它使用一个DbCommandBuilder(实际上,由于可以从DataTable的结构推断出来,甚至不需要SELECT查询)来从SELECT查询构建DbDataAdapter。对于更复杂的需要特定逻辑的DataTables,我使它们实现自定义IDataAdapterProvider,以便它们可以提供自己的DbCommands

+0

我想现在是时候毕业了,找到更好的解决方案......缺乏共同的基础课已经让我很长时间烦恼了。 – 2009-10-12 20:39:11

+0

TableAdapter被声明为partials。你可以在TableAdapters上实现一个接口:) – 2009-12-30 05:40:35

+0

是的,好点...但是它们不能从DbDataAdapter继承,因为它们已经从Component继承 – 2009-12-30 09:21:21