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

时间:2009-06-29 11:30:11

标签: c# .net database dataset vendor-neutrality

我有一个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.以某种方式生成独立于供应商的数据集和数据适配器/ tableadapters(如何?)并在设计时通过VS gui C绑定它们。其他方式???

更新

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

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

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

2 个答案:

答案 0 :(得分:3)

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


  4. 我的建议:

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

    我总是回答其余的问题

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



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

答案 1 :(得分:2)

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

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