问题标签 [sqlexception]

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 投票
16 回答
70125 浏览

.net - 模拟和单元测试需要时如何抛出 SqlException?

我正在尝试在我的项目中测试一些异常,我捕获的异常之一是SQlException.

看来您不能去new SqlException(),所以我不确定如何抛出异常,尤其是在不以某种方式调用数据库的情况下(并且由于这些是单元测试,因此通常建议不要调用数据库,因为它很慢)。

我正在使用 NUnit 和 Moq,但我不知道如何伪造它。

回应一些似乎都是基于ADO.NET的答案,注意我使用的是Linq to Sql。所以这些东西就像在幕后。

@MattHamilton 要求的更多信息:

尝试模拟时发布到第一行

0 投票
9 回答
2820 浏览

c# - 在数据库应用程序中处理 SqlExceptions 的推荐方法

我使用 C# 编写的数据库应用程序,使用 sql server 作为后端。为了数据完整性,我尝试在数据库级别上尽可能多地执行——关系、检查约束、触发器。

由于它们,如果数据不一致,保存/更新/插入可能会失败,并且应用程序会抛出 SqlException。

我在 UI 中进行了各种验证(如果输入的数据无效,则向用户提供有意义的信息),也在 BL 中进行各种验证,它将错误报告回 UI 并呈现给用户。

但是,有些事情确实无法在应用程序中检查,并且由数据库处理:我的意思是当没有级联删除并且用户尝试从主表中删除实体等时删除错误。

例如,Employees 表在许多关系中充当主人 - 员工经理、部门经理、收银员、团队负责人、团队成员等。如果我添加一个不涉及任何关系的新员工,我可以删除它,但用户尝试删除这种关系中的主控,由于在数据库级别强制执行 RI 规则,删除失败(因为它应该),没关系。

我在尝试中编写删除代码...捕获并处理异常,告诉用户他不能删除该员工。但我想为用户提供更有意义的信息——无法删除记录的原因。也许这只是一个测试员工记录,它也被添加到了一个测试团队中。但是用户忘记了添加的位置,如果我可以告诉“无法删除员工,因为它是 T1 团队的一部分”,用户就会知道先去 T1 团队,删除用户然后再次尝试删除它。这是一个简单的例子,因为正如我所说的,一个员工可以参与很多关系——在我的应用程序中,我至少有 20 个。

解决方法是显示SqlException报告的Message,但这一点也不优雅。首先,这个消息是非常技术性的——它谈论的是 FK、PK、Triggers,这些对用户来说毫无意义,会吓到他们。其次,我的应用程序使用多语言 UI,所有菜单和消息都以用户选择的语言显示(在登录时或在用户配置文件中选择)。并且来自 SqlException 的消息是英语(如果我使用英语版本)或者最糟糕的,不太常见的语言,如德语或荷兰语,如果碰巧 sql server 使用该语言。

是否有任何常用或推荐的方法从 sql 异常中提取有意义的信息,以便能够向用户呈现有意义的消息(例如,什么关系或子表导致失败,或者什么触发器等)。但是我可以在程序中以独立于语言的方式进行测试,然后以用户友好的方式格式化我自己的错误消息?

你如何处理这种情况?

感谢所有答案

(PS:抱歉发这么长)

0 投票
1 回答
1379 浏览

linq-to-sql - “事务(进程 ID 56)在锁定资源上与另一个死锁”

我有一个过程(在晚上)以 linq2sql 查询的形式获取大量数据并将其转储为 XML(站点地图)。我的问题是我有时会得到:

System.Data.SqlClient.SqlException:

事务(进程 ID XX)与另一个进程在锁资源上死锁,并已被选为死锁牺牲品。重新运行事务。

此查询是只读的,不必是“事务安全的”。我可以编写这样的过程来避免异常吗?

编辑:

基本上代码是:

0 投票
5 回答
2657 浏览

asp.net - 从 SQLException 错误中输出异常

我有一个 .aspx 页面调用 .asmx 页面的 Web 服务。在那个 .net Web 服务中,我尝试打开与 SQLServer 2008 的数据库连接。连接失败。我不确定为什么。我在 try/catch 中执行此操作,并且在调试时捕获确实被击中。我不确定我可以在那里输出什么,因为我无权访问服务器的文件系统来写入日志文件。

我发现了这个帖子:

在这里,它可能对我有用,但我不知道如何将味精字符串输出到调用此 Web 服务的页面?有没有办法通过让调用页面也实现相同的异常处理程序来将其传播到异常链上?

谢谢 // :)

0 投票
1 回答
1953 浏览

c# - 用户“用户名”登录失败

我有一个表单,可以从我的 MSSQL 服务器中的表中选择一堆行,现在,此表单用于更新数据,它可以正确执行,但是在我使用表单更新数据后,它会重定向回一个页面该表中所有行的数据网格,并允许我选择另一行进行更新,如果我再次选择刚刚更新的行,我会收到“用户 'slehan_ticketadmin' 登录失败”。

现在我知道用户名/密码是正确的,因为我在一分钟前使用了表格来更新数据。我无法查看 SQL 错误日志,因为我的主机限制了我,但这是我更新表单的代码。

您看到的 Ticket 类只是一个保存从 SQL Server 更新/选择/删除的票证数据的类,它只是我以结构化方式修改/保存数据的一种简单方法。我想引起您的注意:

我有另一个名为 TicketDatabase 的类,它有一堆从数据库中插入/选择/更新/删除票的方法。这是 selectTicketFromDatabase() 方法存根。

我将在 localhost 服务器上对此进行测试,看看是服务器还是我的代码导致了错误,但我仍然愿意接受对此特定问题的建议/支持。

提前致谢!

0 投票
1 回答
1988 浏览

sql - 如何从 CSV 获取 SQL LOAD DATA 以在加载时遵守列类型?

我正在使用 and 将 CSV 文件加载到 MySQL (5.1)CREATE TABLELOAD DATA。我有许多列是文本类型(类别)但包含数值。当我创建表时,我将这些列分配为,VARCHAR(254)但 JDBC 驱动程序会抛出 SQLException“第 1 行的 AgeGroup 列被截断的数据”。

我的数据如下所示:

我的创建表语句如下所示

我的负载语句看起来像这样

我猜这是一个类型转换问题,因为 AgeGroup 是一个文本数据库列,但我在其中粘贴了看似数字的内容。

我如何 - 我可以 - 强制LOAD DATA命令遵守列的数据类型并转换文件的内容?

我正在使用官方的 MySQL JDBC 驱动程序。

0 投票
1 回答
191 浏览

optimization - JDBC 中的 SQLException

当我尝试使用 JDBC 在 Informix DB 中运行查询时出现 SQLException。查询的规模很大:

我得到一个例外,因为“in”部分包含超过 5000 个值并且因为长度。有没有办法避免这种情况,或者我应该把它分解并运行两个查询?

0 投票
2 回答
1293 浏览

sql - 为什么 SqlCommand.ExecuteNonQuery 抛出的 SqlException 包含所有 PRINT 作为错误?

当我运行以下代码段时

我收到以下消息:

并且ex.Errors有 4 个条目(SqlError对应于打印的 3 的 aSqlError.Class为 0(相对于真正的错误为 18)

但是,如果我替换ExecuteNonQueryExecuteScalar,我会得到预期的结果:

消息是SQL_Error,我只有一个条目ex.Errors...

有什么办法可以避免cmd.ExecuteNonQuery??

0 投票
1 回答
393 浏览

vb.net - SQL 异常数据

我编写了一个使用 SQL 异常类的程序,然后使用它显示主键违规的自定义消息。我也想要导致违规的主键值。如何从 sqlexception 对象中获取所有生成异常的主键。

0 投票
3 回答
62945 浏览

.net - 如何捕捉死锁导致的SqlException?

从 .NET 3.5 / C# 应用程序中,我想捕获SqlException,但前提是它是由SQL Server 2008 实例上的死锁引起的。

典型的错误信息是Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

但是,它似乎不是此异常的记录错误代码

针对消息中存在的死锁关键字过滤异常似乎是实现此行为的一种非常丑陋的方式。有人知道这样做的正确方法吗?