HOWTO: 从 ADO.NET 中 SQLServer 存储过程返回错误和警告
http://support.microsoft.com/kb/321903/zh-cn
HOWTO: 从 ADO.NET 中 SQLServer 存储过程返回错误和警告
注意:这篇文章是由无人工介入的自动的机器翻译系统翻译完成。这些文章是微软为不懂英语的用户提供的, 以使他们能够理解这些文章的内容。微软不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的使用所引起的任何直接的, 或间接的可能的问题负责。
文章编号 | : | 321903 |
最后修改 | : | 2006年7月24日 |
修订 | : | 6.0 |
概要
本文介绍如何在 ADO.NET 中显示 SQLServer 错误和警告。 如果您引发错误有严重级别为 10 或小于, 它是警告, 会引发任何异常。 此警告不填充到 SqlErrorCollection 。 您必须挂钩到 InfoMessage 事件的 连接 对象并处理有消息。
SQLServer 中错误在 SqlErrorCollection 中捕获, SQL 存储过程使用严重级别为 11 通过 20 引发错误。 还要注意, 某些错误有严重度级别为 11 或更中止整个存储过程。
本文假定您已熟悉以下主题:
示例 SQLServerNorthwind 数据库中 Customers 表上执行简单搜索。 如果未找到之一 CustomerIDs, 引发 SEV 10 异常。 如果两个 CustomerIDs 没有找到, 引发异常 SEV 11, 并存储过程终止。 注意, 您必须添加到挂钩到 InfoMessage 事件的 连接 对象以显示具有严重级别为 10 或更少的错误处理程序。
SQLServer 中错误在 SqlErrorCollection 中捕获, SQL 存储过程使用严重级别为 11 通过 20 引发错误。 还要注意, 某些错误有严重度级别为 11 或更中止整个存储过程。
要求
以下列表概括了推荐硬件、 软件、 网络结构, 以及 ServicePack 所需:• | MicrosoftVisualStudio.NET 兼容 MicrosoftWindows 操作系统上安装 |
• | 带有示例 Northwind 数据库安装 SQL 服务器 |
• | VisualBasic.NET |
• | ADO.NET 数据访问 |
创建项目并添加 SQLServer 中存储过程
以下示例使用 Sev 10 和 11 Sev 错误的组合来演示如何使用 ADO.NET 来显示错误消息具有不同严重级别。 此示例还说明如何使用 IF | ELSE 逻辑结合 RAISERROR 向 SQL 存储过程中错误处理。示例 SQLServerNorthwind 数据库中 Customers 表上执行简单搜索。 如果未找到之一 CustomerIDs, 引发 SEV 10 异常。 如果两个 CustomerIDs 没有找到, 引发异常 SEV 11, 并存储过程终止。 注意, 您必须添加到挂钩到 InfoMessage 事件的 连接 对象以显示具有严重级别为 10 或更少的错误处理程序。
1. | 请执行下列步骤来创建新的 VisualBasicWindows 应用程序项目:
|
||||||
2. | 在 ServerExplorer@@, 配置提供一个 SQLServer 上新数据连接到 Northwind 示例数据库。 | ||||||
3. | 展开 罗斯文数据库 节点, 右键单击 存储过程 , 然后单击新存储过程。 | ||||||
4. | 在, 存储过程的代码窗口粘贴以下存储过程代码:
|
||||||
5. | 关闭存储过程代码窗口, 然后单击 是 以保存更改。 |
添加代码以显示错误和警告
1. | Form 1, 的代码窗口或, VisualBasic.NET 项目中通过将下行添加到 Form 1 .vb 文件顶部添加对 System.Data.SQLClient 引用:
|
2. | 将两个 TextBox 控件 (TextBox 和 TextBox 2) 从工具箱向 Form 1。 |
3. | 按 F 4 TextBox 的 Text 属性改为 ALFKI 。 |
4. | 按 F 4 改为 ANATR TextBox 2 的 Text 属性。 |
5. | 将 Button 控件 (Button 1) 从工具箱拖到 Form 1, 然后按 F 4 Text 属性改为 搜索 。 |
6. | 双击 Button 1 , 然后将以下代码添加到 Button 1 _ Click 事件处理程序: 注意 您必须更改用户 ID < 用户名 > 值和密码 = < 强密码 > 值正确值在运行此代码之前。 确保该用户 ID 具有适当的权限, 对数据库执行此操作。
|
7. | 修改连接字符串指向 SQLServer 服务器上 Northwind 数据库。 |
8. | 要显示具有严重级别为 10 或少, 错误添加下列子来处理 InfoMessage 事件:
|
9. | 按 CTRL+F 5 组合键以运行该程序。 单击 Button 1 , 注意, 看不到 CustomerIDs ALFKI 和 ANATR 输出窗口中。 确保输出窗口是可见, 按 CTRL+ALT+O 组合键。 |
生成和处理 SEV 10 警告
从 ALFKI 更改到 AAAAA , TextBox 中的值, 然后单击 Button 1 以尝试 Customers 数据库中选择一个值不存在。 存储过程中自定义错误代码捕获此方案并引发 SEV 10 异常。 您看到该 SEV 10 异常被引发和通过使用 InfoMessage 事件 Connection 对象的显示。 错误消息具有严重级别为 10 或更少被视为信息性消息, 并不返回错误或查询结果中。生成并处理 SEV 11 异常
和 TextBox 2 , TextBox 更改到 AAAAA , 值从 ALFKI 中将值从 ANATR 到 AAAAA , 并单击 Button 1 。 在 Customers 数据库, 这确实不查找值并引发 SEV 11 异常存储过程。 现在看到了您自定义错误消息 SQLErrorCollection SEV 11 错误。参考
有关其他信息, 请单击文章编号以查看 Microsoft 知识库中文章:
308049 (http://support.microsoft.com/kb/308049/EN-US/) HOWTO: 通过使用 ADO.NET 和 VisualBasic.NET 调用参数化存储过程
309490 (http://support.microsoft.com/kb/309490/EN-US/) HOWTO: 通过 VisualBasic.NET 中使用 DataReader 处理多个结果
316549 (http://support.microsoft.com/kb/316549/EN-US/) HOWTO: 调试 VisualStudio.NET 中存储过程
321902 (http://support.microsoft.com/kb/321902/EN-US/) HOWTO: 在 ADO.NET 调用存储过程与可选值
308051 (http://support.microsoft.com/kb/308051/EN-US/) PRB: 在 VisualBasic.NET 中运行 ADO.NET 命令时不返回输出参数
更一般有关 ADO.NET 或 VisualBasic.NET, 请访问以下 MSDN 新闻组:
http://msdn.microsoft.com/newsgroups/default.aspx?dg=microsoft.public.dotnet.framework.adonet&lang=en&cr=US (http://msdn.microsoft.com/newsgroups/default.aspx?dg=microsoft.public.dotnet.framework.adonet&lang=en&cr=US)
http://msdn.microsoft.com/newsgroups/default.aspx?dg=microsoft.public.dotnet.languages.vb&lang=en&cr=US (http://msdn.microsoft.com/newsgroups/default.aspx?dg=microsoft.public.dotnet.languages.vb&lang=en&cr=US)
这篇文章中的信息适用于:
• | Microsoft Visual Studio .NET 2002 Professional Edition |
• | Microsoft Visual Studio .NET 2003 Professional Edition |
• | Microsoft .NET Framework 1.1 Service Pack 1 |
• | Microsoft ADO.NET 1.1 |
关键字: |
kbhowtomaster kbsqlclient kbsystemdata KB321903 KbMtzh kbmt |
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、