问题标签 [data-access]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
7318 浏览

.net - Oracle.Dataaccess 错误 ORA-06502: PL/SQL: numeric or value error: 字符串缓冲区太小

我正在从 .NET 应用程序调用存储过程。proc 返回 Varchar2 类型的 out 参数。为了获取输出参数,我将参数作为 OracleParameter 传递给命令:

当我执行过程时,我收到一个错误

0 投票
6 回答
1058 浏览

.net - 数据访问层的好方法是什么?

我们的软件是一个定制的人力资源管理系统 (HRMS),使用 ASP.NET 和 Oracle 作为数据库,现在我们实际上正在努力使其成为支持多个租户拥有自己的数据库的产品。

我们的选择:

  1. 使用 NHibernate 来支持多数据库和 OO 的使用。但是我们关注与 NHibernate 学习曲线和我们面临的任何问题有关的问题。

  2. 制作一个通用的 DAL,它将继续使用存储过程与 Oracle 合作,并使用工具将其转换为其他数据库,例如 SQL Server 或 MySql。必须支持单个脚本的多个依赖于数据库的版本存在相关风险。

  3. 提供软件即服务 (SaaS) 并维护我们开展业务的方式。但是,可能有客户不想要或不信任云或其他 SaaS 业务模型。

考虑到这一点,最好的数据访问层技术是什么?

0 投票
8 回答
954 浏览

business-logic - 将业务层与数据层分离时在哪里对实体进行限制

我正在尝试为我的大型 ASP.NET MVC 应用程序创建业务和数据层。因为这是我第一次尝试这种规模的项目,所以我正在阅读一些书籍,并努力小心地将事情正确地分开。通常我的应用程序混合了业务逻辑和数据访问层,并且多个业务实体交织在一个类中(当我试图弄清楚在哪里添加东西时,这让我困惑了几次)。

我一直在阅读的大部分内容是将业务层和数据层分开。这看起来一切都很好而且很花哨,但我无法准确地想象在某些情况下如何做到这一点。例如,假设我正在创建一个允许管理员向系统添加新产品的系统:

然后我通过创建一个存储库来分离数据访问

假设我想要求产品名称至少包含 4 个字符。我看不出如何干净地做到这一点。

我的一个想法是扩展 Name 的 set 属性,并且仅在它的长度为 4 个字符时才设置它。但是,创建产品的方法无法知道名称没有被设置,除了 Product.Name != 无论他们传入什么。

我的另一个想法是将它放在存储库中的 Add() 方法中,但是我的业务逻辑就在数据逻辑中,这也意味着如果 Add 调用失败,我不知道它是否失败业务逻辑或因为 DAL 失败(这也意味着我无法使用模拟框架对其进行测试)。

我唯一能想到的是将我的 DAL 东西放在从存储库中的 Add() 方法调用的第 3 层中,但我在我的书中或在任何领域建模示例中都没有看到这一点网络(我至少见过)。当我不确定是否需要它时,它也会增加域模型的复杂性。

另一个示例是希望确保名称仅由一个产品使用。这会放在 Product 类、ProductRepository Add() 方法中,还是放在哪里?

作为旁注,我计划使用 NHibernate 作为我的 ORM,但是,为了完成我想要的(理论上)我使用什么 ORM 并不重要,因为 TDD 应该能够将它全部隔离。

提前致谢!

0 投票
1 回答
3567 浏览

entity-framework - 没有外键的数据库上的实体框架

我目前正在使用一个没有任何外键定义的大型数据库(大约 500 个表)。

我的问题是有一种简单的方法来设置实体框架(版本 1 或 2)中的关系,而无需手动完成所有操作?

还有一些表具有复杂的关系类型。例如,客户有一个 parentID,但这可以链接到同一张表中的另一个客户 (customerID) 或链接到帐户表中的帐户 (accountID)。这种关系在实体框架中可能吗?

如果这是不可能的,或者如果有人对 Enitity Framework 的替代解决方案有任何意见,我非常愿意接受想法。nHibernate 或活动记录会是更好的解决方案吗?或者创建自己的业务对象和数据访问会更容易吗?

干杯

西蒙

0 投票
1 回答
2927 浏览

visual-studio - 用于数据访问和 CRUD 的 Visual Basic 6 教程

您是否知道一些 Visual Basic 6(不是 Visual Basic .NET)中用于数据访问或 CRUD 的教程(最好是网站或博客)?我正在寻找的口径和深度类似于这个网站:

ASP.NET 数据访问教程

http://www.asp.net/learn/data-access/

虽然上面的站点是针对 web 应用程序的,但我正在寻找一个 WinForm VB6 教程。

在此先感谢您的时间。

0 投票
1 回答
1528 浏览

c# - 流畅的 Nhibernate、复合键和无法解析属性:错误消息

我有一个具有三个属性的简单对象。这链接到一个包含三列的表,其中两列是主键(一个是日期时间,另一个是日期时间)。

每当我尝试查询 nhibernate 时,都会收到以下错误消息:

无法解析属性:invdate of:Models.Invoice

我在设置映射时错过了一些简单的事情,还是我的查询有误?

对象代码:

映射代码:

如果我在查询中去掉对 invdate 的引用,那么这很好。

提前致谢。

0 投票
6 回答
48750 浏览

c# - 一次往返执行多个 SQL 命令

我正在构建一个应用程序,我想将多个查询批处理到数据库的一次往返中。例如,假设单个页面需要显示用户列表、组列表和权限列表。

所以我已经存储了procs(或者只是简单的sql命令,比如“select * from Users”),我想执行其中的三个。但是,要填充这一页,我必须进行 3 次往返。

现在我可以编写一个存储过程(“getUsersTeamsAndPermissions”)或执行一个 SQL 命令“select * from Users;exec getTeams;select * from Permissions”。

但我想知道是否有更好的方法来指定在一次往返中执行 3 次操作。好处包括更容易进行单元测试,并允许数据库引擎并行化查询。

我正在使用 C# 3.5 和 SQL Server 2008。

0 投票
1 回答
2164 浏览

wcf - WCF SOA:CRUD 数据访问服务...为什么要麻烦(或者我们的设计错误)?

我们的 SOA WCF 系统中有一个数据访问服务。该服务负责对“系统范围”的数据库表执行 CRUD(创建、更新、删除)操作,同时也是查询数据的来源。系统中的任何其他服务想要访问 DAS 控制下的表都必须到 DAS 获取或修改它。我们使用实体框架并为此 DAS 构建了我们自己的 POCO 状态跟踪系统。

我们的数据库中有其他表属于单个服务,并且存储数据仅供自己使用,即当它们崩溃和恢复或记录业务信息时它们可以访问的状态信息。我们有一条规则,任何一张表都不能被多个服务访问:因此多个服务所需的数据最终会存储在 DAS 中。

事实是我从来没有真正理解为什么数据访问服务是一个好主意,而不是直接访问表。似乎要慢一些,我们的 DAS 不是事务性的,因为它无法发回 POCO 图以进行数据库更新(一次只有一个 POCOS),而且我们还遇到问题,DAS 实际上是另一个需要数据的服务的客户端从它...循环依赖。

为什么要打扰DAS?对于 SOA,为什么 DAS 如此重要?我在这里想念什么?单点控制?

并非所有表都是 DAS 的一部分并且某些服务具有自己的“私有”表,这也是 SOA 设计缺陷吗?

欢迎对此进行任何讨论。

0 投票
6 回答
233 浏览

.net - 如何为我的公司创建一个通用的整体 .NET 编程结构?

当没有现成的替代方案时,我所在的公司编写自己的业务数据应用程序。最常见的是 - 登录屏幕 - 一些主要是 SQL Server 表的可视化的屏幕 - 一些报告

过去他们使用的是 MS Access。这些并不完全是最优秀的编码人员,但他们大多了解如何构建数据库以及他们想要的 UI。

我们宁愿有一个通用的登录屏幕、菜单屏幕等,我们可以插入应用程序并开始使用。这应该有助于提高开发速度和可维护性。

当然,有不止一种方法可以做到这一点,我们问题的核心似乎是数据访问。选项似乎包括:

1) GUI 数据集/表适配器,如 ASP.NET 上的视频,向您展示了如何做。我们中的一些人已经做了很多这样的事情。有利于开发速度。有时数据连接会在您不注意的情况下发生变化。巨大的方法签名(插入或更新时每个字段一个参数)很容易出错。有时参数检测不正确。动态参数(例如带有可选过滤器的报告)非常困难。

2) 极其结构化的 n 层样式。例如,网格的数据源是对象的集合。表示层调用对象 A 中的静态方法,该方法调用数据访问层方法,该方法为从数据库返回的每一行实例化 A。A 需要为表中的每个字段提供 get/set 方法以及内部变量和构造函数变量。每个字段都被输入了很多次。没有什么是永远的。对于这么简单的应用程序可能有点矫枉过正。

3) 通用表使用通用函数驱动所有内容,这些函数循环遍历字段列表以动态创建 UPDATE 和 INSERT 语句。选择主要是 SELECT * 类型的东西。快速发展,但缺乏强大的打字让我感到害怕。似乎 SQL 注入地雷无处不在,但我确信加倍引号是避免这种情况所需要的。

那里肯定有更多选择,但我不知道它们是什么。您对我/我们有什么建议吗?

0 投票
3 回答
426 浏览

.net - 请解释“Fanboys 如何看待 .NET 数据访问策略”

这张图表在我关注的博客上被链接了很多次,我感觉就像一个不明白的人。所以,在这里冒险并询问这个社区。请在此处的博客文章中解释此网格。

替代文字