当 ADO.NET 查询无法检索请求的数据时应抛出什么异常?

2024-02-20

为了向我们的应用程序添加一些参数验证和正确的使用语义,我们尝试向 .NET 应用程序添加正确的异常处理。

我的问题是:当在 ADO.NET 中抛出异常时,如果特定查询没有返回数据或找不到数据,我应该使用什么类型的异常?

伪代码: (阅读,不要仔细检查代码的语义,我知道它不会编译)

public DataSet GetData(int identifier)
{
    dataAdapter.Command.Text = "Select * from table1 Where ident = " + identifier.toString();
    DataSet ds = dataAdapter.Fill(ds);
    if (ds.table1.Rows.Count == 0)
        throw new Exception("Data not found");

    return ds;
}

The MSDN 指南 http://msdn.microsoft.com/en-us/library/ms229021(VS.80).aspx state:

  • 考虑抛出驻留在系统命名空间中的现有异常,而不是创建自定义异常类型。

  • 如果您的错误条件可以通过与任何其他现有异常不同的方式进行编程处理,请创建并引发自定义异常。否则,抛出现有异常之一。

  • 不要仅仅为了让你的团队例外而创建和抛出新的例外。

没有硬性规定:但如果您有以不同方式处理此异常的场景,请考虑创建自定义异常类型,例如 DataNotFoundException正如约翰·布雷特(Johan Buret)建议的 https://stackoverflow.com/questions/121700/what-exception-should-be-thrown-when-an-adonet-query-cannot-retrieve-the-reques#121809.

否则,您可能会考虑抛出现有异常类型之一,例如 System.Data.DataException 甚至可能是 System.Collections.Generic.KeyNotFoundException。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 ADO.NET 查询无法检索请求的数据时应抛出什么异常? 的相关文章

  • DotNET 应用程序中的 GDI 句柄

    我的纯 DotNET 库作为非托管桌面应用程序中的插件运行 我收到了稳定的 虽然低 崩溃报告流 这些报告似乎表明 GDI 句柄存在问题 错误消息中的字体等 恢复为系统字体 各种控件的显示崩溃 不久后发生大规模崩溃 我的窗体几乎没有控件 但我
  • 为什么《Scala 中的函数式编程》一书的“无异常处理错误”一章中没有提到“scala.util.Try”?

    在 Scala 中的函数式编程 一书中的 无异常处理错误 一章中 作者给出 从函数体抛出异常的问题 Use Option如果我们不关心实际的异常 Use Either如果我们关心实际的异常 But scala util Try没有提到 从我
  • 查询中列的顺序重要吗?

    当从 MySQL 表中选择列时 与表中的顺序相比 选择列的顺序是否会影响性能 不考虑可能覆盖列的索引 例如 您有一个包含行 uid name bday 的表 并且有以下查询 SELECT uid name bday FROM table M
  • SPARK SQL - 当时的情况

    我是 SPARK SQL 的新手 SPARK SQL 中是否有相当于 CASE WHEN CONDITION THEN 0 ELSE 1 END 的内容 select case when 1 1 then 1 else 0 end from
  • 如何在Oracle中使用Timestamp_to_scn和Scn_to_timestamp?

    我的查询结果是这样的 select cast to date a start time mm dd yyyy hh mi ss pm as timestamp date of call ora rowscn from calling tab
  • 解决找不到程序集的问题 |文件未找到异常 |融合日志

    我正在尝试将我的解决方案包 wsp 部署到 SharePoint 2007 环境 WSP 包含一个功能 该功能加载功能接收器类以在运行时部署计时器作业 在部署此 WSP 时 我不断得到 特征 fb631f6c 2c46 4ab5 b7b3
  • 使用两个日期之间的随机日期时间更新每一行

    我有一个专栏叫date created我希望每一行保存一个随机日期 日期距当前时间为 2 天 我正在运行以下查询 但它会更新具有相同随机日期的所有行 我希望每一行都是随机的并且不相同 update table set date create
  • 如何将可视选择的文本通过管道传输到 UNIX 命令并将输出附加到 Vim 中的当前缓冲区

    使用 Vim 我尝试将在可视模式下选择的文本通过管道传输到 UNIX 命令 并将输出附加到当前文件的末尾 例如 假设我们有一个 SQL 命令 例如 SELECT FROM mytable 我想做如下的事情
  • 找不到 Microsoft.Office.Interop Visual Studio

    我正在开发一个使用 C 发送电子邮件的应用程序 该应用程序将能够使用邮件模板等 问题是我无法找到任何 Office Interop 引用 这意味着我无法使用 Outlook 我的计算机上安装了 Office 但我也尝试从此链接安装 PIAh
  • Oracle:使用SQL或PL/SQL查找动态SQL中的错误位置

    如何在 PL SQL 或 SQL 中找到动态 SQL 语句中的错误位置 从 SQL Plus 中 我看到了错误的位置 例如 无效的 SQL DML 语句 SYS orcl gt SELECT 2 X 3 FROM 4 TABLEX 5 TA
  • 如何正确转义mysql?

    我刚刚发现如果我写 select from tbl where name like foo 然后添加 foo 作为参数及其值 a 用户数据 它不会正确转义 我勒个去 它想要 a 即使我使用参数 我还是忍不住觉得我对 sql 注入持开放态度
  • 使用 JSON 参数的 Postgres 批量 INSERT 函数

    这是一个plpgsqlpostgres 的函数9 6 它试图INSERT一行 如果插入没有失败 由于违反键约束 那么它会运行更多命令 CREATE FUNCTION foo int text text RETURNS void AS BEG
  • 在sqlite SQL语句中与order by子句结合使用limit

    下面的两条 SQL 语句总是会产生相同的结果集吗 1 SELECT FROM MyTable where Status 0 order by StartTime asc limit 10 2 SELECT FROM SELECT FROM
  • sql server 按组排名

    问题看似简单 但我却无法理解 这是针对 sql 服务器的 what I have in a table What I need as a output cksum id cksum id 2162514679 204 2162514679
  • VB.NET 中的静态方法实现

    我很困惑Static在 VB NET 中的实现 在 C 中 我们可以创建静态类和静态方法来为我们的应用程序编写实用方法 现在 VB NET 让我们创建Module代替静态类 如果我们在模块中创建一个方法 默认情况下它会变成静态的 但在我的应
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 对多个数据库执行 SQL 查询

    我知道我的帖子与该论坛中的其他帖子的标题非常相似 但我真的找不到我需要的答案 这是我的问题 我的 Windows Server 上运行着 SQL Server 在我的 SQL Server 中 我有大约 30 个数据库 它们都具有相同的表和
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • Spring Boot中如何设置嵌入式tomcat的日志级别?

    Spring Boot中如何设置嵌入式tomcat的日志级别 特别是我需要查看tomcat集群相关的日志 我将以下行添加到 application properties 中 但 tomcat 似乎只记录 INFO 级别日志 logging
  • Flutter调试release模式,release模式下启用日志

    根据文档我知道 调试信息被删除 调试已禁用 但是我们可以以某种方式强制打印日志 或者在发布模式下进行调试吗 生产应用程序 我正在使用 Android Studio 例如 在 AS 中开发 Android 应用程序时 我们可以打印日志 and
  • PHP lambda 函数和范围

    下面的函数接受一个数组并检查其键和值是否与指定的数据类型匹配 我似乎对之前工作的内部 lambda 函数遇到了一些问题 我正在运行 PHP v5 3 6 他们最后在 v5 3 4 下工作 他们抱怨未传递的变量不在范围内 如果我将该变量重述为
  • 如何使用 uiview 和 uibutton 检测对 Uitableview 单元格的点击?

    我创建了一个表视图 并将自定义 uiview 添加到单元格的内容视图中 uiview 有一个 uibutton 但是 我可以在创建单元格时将 uibutton 添加到内容视图中 我想获取桌面视图上的点击事件来执行某些操作 我还希望 uibu
  • 如何映射或嵌套 Python 2.7 函数生成器?

    如果我在 Python 2 7 中有一个非常简单 尽管可能非常复杂 的函数生成器 如下所示 def accumulator x yield 0 while True x yield x 可以这样使用 gt gt gt a accumulat
  • 如何在firebird sql语句中使用非ascii字符串文字?

    我想在 firebird sql 查询中使用非 ascii 字符串文字 所以我用了火焰知更鸟首先看看它是否有效 我用过这样的东西 SELECT NAME FROM TABLE1 WHERE NAME 我也尝试过 SELECT NAME FR
  • 在 C++ 中传递变量“名称”

    我目前仅使用以下模板作为检查 NULL 指针的方法 如果为 NULL 则将错误消息打印到日志文件 然后返回 false template lt typename T gt static bool isnull T t std string
  • 关于“Hello World”Android 教程的菜鸟问题

    刚刚开始学习 Android 开发和 Java 所以 这是我正在使用的代码 package com example helloandroid import android app Activity import android os Bun
  • 如何让 Eclipse 运行我的所有 Groovy 单元测试?

    我有一个 Eclipse 项目 其中有许多用 Groovy 编写的单元测试 我可以使用 Eclipse 的 GUnit 运行配置在每个单独的类中运行测试 我打开此配置 选择 运行单个测试 单选按钮 然后选择我要运行其测试的类 这工作正常 但
  • Doxygen 速度慢

    Doxygen 在我们的代码库上运行大约需要 12 小时 这主要是因为有大量代码需要处理 约 150 万行 然而 我们很快就无法进行夜间文档更新 因为它们花费的时间太长 我们已经不得不减少图表深度以将其缩短至 12 小时 我已经尝试过标准方
  • 如何在nodejs中将UUID存储为字母数字

    Node uuid提供了一个优秀的包来生成uuid https github com broofa node uuid https github com broofa node uuid Generate a v4 random id uu
  • 是否可以提交一系列不同的工作来进行 slurm ?

    例如 我有一个名为myScript那个过程one输入文件 我有一个文件名列表 也就是说 我需要运行 myScript
  • 我可以在每次除法发生时禁用检查零除法吗?

    为了更好地理解 Rust 的恐慌 异常机制 我编写了以下代码 feature libc extern crate libc fn main let mut x i32 unsafe x libc getchar let y x 65 pri
  • Coqide 错误:编译的库 Basics.vo 对库做出了不一致的假设

    我在 mac os X 上使用 CoqIDE 8 4pl5 当 CoqIDE 转发到此命令时 会弹出此错误消息 需要导入基础知识 错误 编译的库 Basics vo 对库做出了不一致的假设 Coq Init Notifications 当我
  • 从 NHibernate 映射文件生成 C# 类的工具?

    有什么工具可以从 NHibernate 映射文件生成 C 类 On the NHibernate 资源页面 http nhibernate info doc nh en index html toolsetguide s2在 有用的工具 下
  • axios POST 后在 Vue 组件中显示更新数据的问题

    我陷入了一个问题并希望JavaScript 绝地武士可以帮助我指明正确的方向 问题范围 我将 Laravel 集合传递给我的 Vue 组件 在组件内部 我迭代集合并通过 axios 提交表单 表单提交 数据库中数据更新 但是 我不清楚如何在
  • textFieldDidEndEditing 触发“太晚了”

    我有一个多视图流程 用户正在输入数据 并且我将其保存到模型类属性中的每一步 I use textFieldDidEndEditing检查输入是否有效 如果有效 则保存输入的数据 在视图上 我有一个 continueButtonClicked
  • java 中的不可变性

    In 有效的Java http java sun com docs books effective Bloch 建议在使对象不可变时将所有字段设为 Final 有必要这样做吗 仅仅不提供访问器方法不会使其变得不可变 例如 class A p
  • Knockoutjs 清除组合框中选定的值

    我有这个简单的 knockout js 应用程序 View
  • 当 ADO.NET 查询无法检索请求的数据时应抛出什么异常?

    为了向我们的应用程序添加一些参数验证和正确的使用语义 我们尝试向 NET 应用程序添加正确的异常处理 我的问题是 当在 ADO NET 中抛出异常时 如果特定查询没有返回数据或找不到数据 我应该使用什么类型的异常 伪代码 阅读 不要仔细检查