【问题标题】:Automated DataSet/DataTable instead of SQLCommands自动化的 DataSet/DataTable 而不是 SQLCommands
【发布时间】:2011-12-26 12:28:23
【问题描述】:

我曾经使用 SqlCommand 以及 Methodes ExecuteReader 和 ExecuteNonReader 来完成所有数据库逻辑,但从未使用过 DataSet 或 Datatable 之类的东西。

Dim dbcon As Data.Common.DbConnection
Dim cmdselect = dbcon.CreateCommand()
cmdselect.CommandText = "SELECT * FROM users WHERE id = 1"
cmdselect.ExecuteReader()

Dim cmdupdate = dbcon.CreateCommand()
cmdselect.CommandText = "UPDATE FROM useres WHERE id = 1 SET name = 'newname'"
cmdselect.ExecuteNonQuery()

这有时很难管理。所以我想用一种更有效的方式。可能想查询一个 DataTable,对其进行更改,然后调用 .AcceptChanges 并将所有更改写回数据库。但这似乎不是它的工作方式? .Update 方法要求我带上我自己的更新命令,如果我必须自己这样做,为什么要使用数据表、数据集......无论如何?

您如何编写数据库后端?

  • 使用 SQLCommands 数组和变量?
  • 使用 DataSet、DataTable?
  • 使用 VisualStudio 生成的模板?
  • 使用 Linq?

我真的不知道该走哪条路......

【问题讨论】:

    标签: .net database vb.net


    【解决方案1】:

    首先阅读一些描述数据库/实体提供者文档的文章。 您必须知道,一个好的 DB 提供程序使用 Datatables + Linq 进行数据库“操作”,并使用另一个抽象层进行实体操作(通过自定义运算符进行双向 Datatable 实体转换)。

    【讨论】:

      【解决方案2】:

      最佳解决方案很大程度上取决于现在和未来数据的来源和目的地。

      如果正在使用或将要使用 Web 服务或 WCF 服务,则 DataTable/DataSet 不是合适的解决方案,因为这些实体在这些场景中要么不序列化,要么序列化不好。

      我个人的偏好是为所有数据实体(有时称为数据传输对象或 DTO)创建类,并创建与这些实体一起使用的数据库代码,尽管这需要更多的工作。

      我知道有可用的对象/关系映射 (ORM) 组件可以减轻您的负担,但我们发现编写自己的数据库映射代码同样容易,这样我们就可以轻松地将对象移入和移出使用反射的数据库。

      以下是我推荐的两种主要做法,因为它们允许我们将应用程序扩展到数以万计的用户,并使用完全相同的数据库后端支持多个客户端(ipad、android、winforms、silverlight、Web 客户端)和DTO:

      尽可能将您的数据库交互嵌入到存储过程中。这使得修复和更改行为比试图追踪散布在代码中的 SQL 更容易。它还降低了 SQL 注入攻击的可能性并提高了数据库性能。

      创建直接映射到数据库表的类。您可以使用 CodeSmith Generator 等自动化工具从数据库表中创建类和 CRUD 存储过程。这种做法允许您使用反射执行从数据库表到 DTO 以及从 DTO 到存储过程参数的自动映射。

      【讨论】:

        【解决方案3】:

        蛇,

        我过去常常按照您描述的方式编写整个应用程序。我确实知道这有时会很痛苦,例如在处理数百个表中的数百个查询时。

        我对您的建议是切换到 ADO.NET 实体框架/Linq。它的学习曲线非常低,完成最多的 CRUD 操作应该不会超过一天。

        我发现自己节省了多达 80% 的时间,不再需要编写所有这些查询。

        替代方案,您可以使用例如 Telerik OpenAccess ORM 免费版进行试用。 如果您在几个小时内开始,他们有一个非常好的文档快速入门女巫。

        【讨论】:

          猜你喜欢
          • 2017-07-13
          • 1970-01-01
          • 2011-03-25
          • 2013-06-25
          • 2011-04-11
          • 2012-07-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-16
          相关资源
          最近更新 更多