0

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

现在我想知道可以从原型中重用哪些部分(如果有的话)。1. 数据集(类型化) ? 2. 表适配器?(可能不是,它们包含特定于 SQL Server 的语法) 3. 绑定到 DataGridViews

最重要的是,如果我们需要重新实现这一切,有没有办法在设计时做到这一点?或者,1. 我们是否需要以编程方式创建无类型数据集?2. 我们是否需要以编程方式创建它的数据适配器(或表适配器)?如果是,两者中的哪一个?3. 我们是否需要以编程方式创建其与界面的datagridviews 的绑定?

也许无关紧要:如果我们从现有的数据库模式创建一个实体模型(AFAIK 它提供数据库独立性),我们可以使用它以某种方式创建与我们的数据网格视图的绑定吗?

谢谢!

那么,为了保留我们的 Bindings 和 dataGridViews,以及我们已经实现的一些额外的逻辑,我们是不是应该把所有生成的 TableAdapter 都扔掉,手动编写呢?如果我们真的扔掉它们,我们应该使用 DataAdapters 来代替吗?

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

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

更新:

那么,为了保留我们的 Bindings 和 dataGridViews,以及我们已经实现的一些额外的逻辑,我们是不是应该把所有生成的 TableAdapter 都扔掉,手动编写呢?如果我们真的扔掉它们,我们应该使用 DataAdapters 来代替吗?

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

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

4

2 回答 2

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


我的建议:

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

我总是做什么来回答其余的问题

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



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

于 2009-06-29T17:20:53.937 回答
2

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

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