从 Web 服务器访问 SQL 数据库的合适方法
Suitable way to access SQL database from Web Server
我正在用 C# 编写网络服务器以访问 SQL 数据库。目前只使用 Visual Studio 附带的 SQL Server Express,但我需要在将来灵活地转到其他 SQL 实现。 (例如 MySQL)
我正在查看数据访问层,并试图找出实现它的最佳方法。周围似乎有很多选择。
- DataSet - 我对这个不太了解 - 我添加了一个简单的 DataSet
到我的项目中,使用了IDE,好像增加了很多看不懂的地方
自动生成的代码,我无法理解如何使用它,只能检索整个 table,然后自己解析它。
- Linq to SQL - 由于 "SQL-Server only" 实施,不热衷于此。
- Linq to DataSet - 使用 Linq 查询检索数据集。
- 直接 SQL - SqlConnection、SqlCommand 等
我熟悉 SQL 和 comfortable 编写我自己的 SQL 命令。这种方法对我来说似乎没问题,但是现在有更多现代方法可用,我是否完全疯狂地构建自己的 DAL 接口 类 并编写 SQL 代码来填充它们?
查询数据集是否比在 SQL 中查询更容易或更灵活?
我是否必须为每个不同的查询创建不同的数据集?还是数据集加载整个 table,然后查询?
我还担心数据集在适应数据集下不同或不断变化的数据方面的灵活性。如果我开始向 table 中添加和删除列,这是否会破坏数据集,and/or 破坏我现有的使用数据集的代码?
我有点守旧,相信一切都要简单。我应该坚持并学习如何使用数据集,还是直接开始创建我自己的界面 类,并构建 SQL 查询来填充它们?
考虑到您对 Dataset 的担忧,嗯,让您的查询填充您的 DataSet 更有效,这样您就不会在有人编辑时对您的数据产生问题你的数据在你的数据库中。这也回答了您 "will that muck up the DataSet?" 的问题,既然您对数据集有查询,它就不会再弄乱您的数据集,因为您是从后端(数据库)操纵数据,而只是 retrieving/passing 值通过您的代码。还有一个是,你必须开始直接创建你自己的接口 类 用于面向对象的方法,这是现在常用的方法。
忠告,每当您尝试使用 SqlCommand
时,最好为此使用一个存储过程,而不是使用纯文本(查询字符串)在数据操作期间保护您的数据。
Entity Framework 绝对是要走的路,正如我对原始问题的评论所建议的那样。 Entity framework v6 通过 NuGet 安装。一旦我着手设置 Entity Framework,它就非常易于使用,并允许我的业务层直接在每个 table 上使用 linq 查询。延迟加载功能看起来非常有用,可以使用外键轻松地从 table 跳转到 table,尽管我在我的代码中用得不多。
EF 自动创建了所有数据接口 类,因此我无需执行任何操作。由于我的数据库在开发过程中有点 'fluid',因此 EF 还可以轻松地通过代码传播数据库更改并自动更新代表 table 的数据接口 类。
我正在用 C# 编写网络服务器以访问 SQL 数据库。目前只使用 Visual Studio 附带的 SQL Server Express,但我需要在将来灵活地转到其他 SQL 实现。 (例如 MySQL)
我正在查看数据访问层,并试图找出实现它的最佳方法。周围似乎有很多选择。
- DataSet - 我对这个不太了解 - 我添加了一个简单的 DataSet 到我的项目中,使用了IDE,好像增加了很多看不懂的地方 自动生成的代码,我无法理解如何使用它,只能检索整个 table,然后自己解析它。
- Linq to SQL - 由于 "SQL-Server only" 实施,不热衷于此。
- Linq to DataSet - 使用 Linq 查询检索数据集。
- 直接 SQL - SqlConnection、SqlCommand 等
我熟悉 SQL 和 comfortable 编写我自己的 SQL 命令。这种方法对我来说似乎没问题,但是现在有更多现代方法可用,我是否完全疯狂地构建自己的 DAL 接口 类 并编写 SQL 代码来填充它们?
查询数据集是否比在 SQL 中查询更容易或更灵活? 我是否必须为每个不同的查询创建不同的数据集?还是数据集加载整个 table,然后查询?
我还担心数据集在适应数据集下不同或不断变化的数据方面的灵活性。如果我开始向 table 中添加和删除列,这是否会破坏数据集,and/or 破坏我现有的使用数据集的代码?
我有点守旧,相信一切都要简单。我应该坚持并学习如何使用数据集,还是直接开始创建我自己的界面 类,并构建 SQL 查询来填充它们?
考虑到您对 Dataset 的担忧,嗯,让您的查询填充您的 DataSet 更有效,这样您就不会在有人编辑时对您的数据产生问题你的数据在你的数据库中。这也回答了您 "will that muck up the DataSet?" 的问题,既然您对数据集有查询,它就不会再弄乱您的数据集,因为您是从后端(数据库)操纵数据,而只是 retrieving/passing 值通过您的代码。还有一个是,你必须开始直接创建你自己的接口 类 用于面向对象的方法,这是现在常用的方法。
忠告,每当您尝试使用 SqlCommand
时,最好为此使用一个存储过程,而不是使用纯文本(查询字符串)在数据操作期间保护您的数据。
Entity Framework 绝对是要走的路,正如我对原始问题的评论所建议的那样。 Entity framework v6 通过 NuGet 安装。一旦我着手设置 Entity Framework,它就非常易于使用,并允许我的业务层直接在每个 table 上使用 linq 查询。延迟加载功能看起来非常有用,可以使用外键轻松地从 table 跳转到 table,尽管我在我的代码中用得不多。
EF 自动创建了所有数据接口 类,因此我无需执行任何操作。由于我的数据库在开发过程中有点 'fluid',因此 EF 还可以轻松地通过代码传播数据库更改并自动更新代表 table 的数据接口 类。