.Net:如何创建独立于供应商的数据集,Tableadapters,绑定(DB在运行时决定)

我有一个C#Windows窗体应用程序,其原型是在SQL Server(强类型数据集)上创建的。 在最终版本中,应用程序必须能够在SQL Server,MySQL或Oracle上运行。

现在我想知道哪些部件(如果有的话)可以从原型中重复使用。 1.数据集(打字)? 2. TableAdapters? (可能不是,它们包含SQL Server特定的语法)3。绑定到DataGridViews

最重要的是,如果我们需要重新实现所有这些,是否有办法在设计时执行此操作? 或者,1。我们是否需要以编程方式创建无类型数据集? 2.我们需要以编程方式创建其数据适配器(或表适配器)吗? 如果是,那两个中的哪一个? 3.我们是否需要以编程方式创建其对接口的datagridviews的绑定?

也许是无关紧要的:如果我们从现有的db模式创建一个实体模型(AFAIK,它提供db独立性),我们可以用某种方式创建绑定到我们的datagridviews吗?

谢谢!

那么,为了保留我们的Bindings和dataGridViews,以及我们实现的一些额外逻辑,我们是否应该丢弃所有生成的TableAdapter并手动编写它们? 如果我们扔掉它们,我们应该使用DataAdapters吗?

这是一种“按书”的方法吗? 有没有人做过这样的事情?

更一般地说,如果您需要创建一个Forms应用程序以在多个dbs中工作,您会这样做:A。使用无类型数据集,dataadapters / tableadapters和手工创建的绑定B.以某种方式生成独立于供应商的数据集和dataadapters / tableadapters(如何?)并在设计时通过VS gui C绑定它们。其他方式???

更新:

那么,为了保留我们的Bindings和dataGridViews,以及我们实现的一些额外逻辑,我们是否应该丢弃所有生成的TableAdapter并手动编写它们? 如果我们扔掉它们,我们应该使用DataAdapters吗?

这是一种“按书”的方法吗? 有没有人做过这样的事情?

更一般地说,如果您需要创建一个Forms应用程序以在多个dbs中工作,您会这样做:A。使用无类型数据集,dataadapters / tableadapters和手工创建的绑定B.以某种方式生成独立于供应商的数据集和dataadapters / tableadapters(如何?)并在设计时通过VS gui C绑定它们。其他方式???

  1. 类型化数据集/表与数据库无关。 (但是,如果您在设计器中添加适配器,则会获得特定于DB的信息。请勿使用设计器中的适配器
  2. 适配器不是数据库独立的。
  3. 数据绑定与数据库无关。 但要注意拖放数据绑定自动添加适配器

我的建议:

  • 从数据集设计器中删除adpater
  • 使用带有获取/填充表的方法的简单类重写您自己的存储库/适配器。 所以你使用它们而不是生成的适配器。 这些类可以是特定于DB的。 例如PersonRepositorySqlServer,PersonRepositoryMySql。 或者也许你给db-type一个构造函数来尽可能地重用SQL。
  • 如果您在表单上使用了适配器,请将其删除。 手动编码数据集的填充

我总是回答其余的问题

  • 我使用类型化的数据集,但我只是制作表而不是适配器
  • 我通常对数据绑定进行编码,因为有时候设计者会搞砸,但这不一定是db独立的
  • 我编写自己的存储库,使用适配器来填充/获取/更新数据表。 但是我手工编写它们。 给定一个类型化的数据表,通过这种方式自动生成更新/插入/删除/填充语句相当容易。

重写适配器看起来很难,但实际上非常可行。

很多问题,这里有一些答案:

  • 数据集与数据库无关。 也可以输入类型数据集。
  • 到目前为止,DataAdapter依赖于数据库,因为它们包含与数据库通信的SQL
  • 使用基本的ADO.NET概念(IDbConnection,IDbCommand等)可以使供应商独立工作的抽象和可能性
  • 您也可以将普通的旧c#对象绑定到BindingSource和朋友。 如果你沿着这条路走下去准备扔几乎所有的东西你都有原型。 您将需要一个可以在“实体”和数据库之间进行转换的框架。 它取决于该框架对您的实体的限制是什么以及您的数据库独立性如何。