【问题标题】:Are Datasets/Datatables the only way to return data?数据集/数据表是返回数据的唯一方法吗?
【发布时间】:2016-09-01 12:44:12
【问题描述】:

在 3 层架构(C#、ADO.NET)中,数据集和数据表是从数据层返回数据到表示层的唯一选择吗?我一直在使用 Datatables,但我什么时候会尝试这样做

public User getUserByP(User user)
    {
        User t = new User();
        using(SqlConnection con = new SqlConnection(Conexion.Cn))
        {
            con.Open();
            SqlCommand command = new SqlCommand("spLogIn_User", con);
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.AddWithValue("@user", User.user);
            command.Parameters.AddWithValue("@password", User.Pass);
            SqlDataReader reader =  command.ExecuteReader();
            while (reader.Read())
            {
                t.IdUser = reader.GetInt32(0);
                t.Name = reader.GetString(1);
                t.LastName = reader.GetString(2);
                t.Access = reader.GetString(3);
                t.user = reader.GetString(4);
                t.Pass = reader.GetString(5);
            }
        }
        return t;
    }

我有一个错误,因为数据层和表示层之间没有通信。这在 MVC 中是可行的(我认为),但在这里没有。因此,如果只想返回 1 个结果,datatble 或 dataset 是唯一的选择吗?

【问题讨论】:

  • 不,当然它们不是唯一的选择。还有很多其他的,比如 Linq-To-Sql、Linq-To-Entities、Dapper.Net、手动填充自定义类 etc.pp
  • 您的问题与DataSet/DataTable 有什么关系?你没有使用一个。确切的错误是什么,它的消息是什么?它是在哪里提出的?
  • 这是一个例子,如果我想从 de 数据层返回一个对象到我的表示层,它不会工作,因为我不能在我的表示层中有实体,除非我从 depresentation dll 引用 de数据 dll。
  • 与大多数开发人员的想法相反,答案是否定的。事实上,DataSets/DataTables 是 2000 年代早期的,也许是 2000 年代中期。现在有这样更好的方法。由于 Entity-Framework 已经问世,我现在尝试制作对象库(Poco's),并使用 DataReaders 或 EF 来填充 Poco's。

标签: winforms ado.net dataset 3-tier


【解决方案1】:

没有。还有其他方法可以将数据库中的数据检索到数据层中。

  • Linq 到 sql
  • 实体框架
  • n休眠
  • Dapper.Net

另一方面,如果您想知道如何从表示层访问数据层而不需要额外的依赖,您可以执行以下操作。

  1. 在数据层,总是返回一个简单的对象,而不是一个专门的类型(datatable/dataset),以避免对system.data或其他dll的不必要的依赖

  2. 添加业务层。在 3 层应用程序中,该层使用来自数据层的数据并添加验证、业务规则和逻辑来访问和操作该数据。

  3. 引用表示层中的业务层以显示所需的信息。

有关如何实现三层/层架构的更多详细信息,请参阅this explanation

【讨论】:

  • 我在想(关于第 2 点),但它不违反 3 层规则?正如我在 MVC 中所说,我们可以在视图中包含实体引用,但这里可能吗?
  • 我已经更新了我的答案。请再次检查。基本上,在表示层内引用业务层是没有问题的,这就是定义 3 层/层架构的方式。更多详情,请查看此链接stackoverflow.com/a/13786596/2332687
猜你喜欢
  • 2011-10-07
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 2014-02-21
相关资源
最近更新 更多