当 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 查询无法检索请求的数据时应抛出什么异常? 的相关文章

  • idleTimeout 和 ShutdownTimeout 之间的区别

    我正在尝试放宽网站的会话过期策略 以便用户可以指定会话超时间隔 我需要弄清楚应该指定哪些网站相关设置 以免过多限制用户 例如 可能需要 1 天的间隔 我将使用门票来实现这一点 现在 我知道我可以在网站的 web config 文件中指定id
  • 正则表达式的命名空间不起作用

    我正在翻新一些曾经在 NET Framework 3 5 上运行的旧代码 使其能够使用 C 在 NET Framework 4 上运行 以下正则表达式过去在 3 5 版本中运行良好 但由于某些奇怪的原因不再运行 public static
  • 如何禁用 Alt + F4 关闭表单?

    What is the best way to disable Alt F4 in a c win form to prevent the user from closing the form 我使用表单作为弹出对话框来显示进度条 但我不希
  • 验证 sql/oracle 中的电子邮件/邮政编码字段

    对于以下方面的一些建议将不胜感激 是否可以通过 oracle 中的 sql 中的某种检查约束来验证电子邮件和邮政编码字段 或者我怀疑 pl sql 带有正则表达式的这种事情 Thanks 这是电子邮件地址的正则表达式语法 包括引号 a zA
  • 如何将存储过程结果映射到自定义类?

    我在用entity framework 5我已经添加了两个存储过程到我的 edmx model 第一个存储过程返回一个字符串 如果我在 Visual Studio 中打开模型浏览器 我可以更改Returns a Collection Of节
  • C# 如何使用 CallNtPowerInformation 和 Interop 来获取 SYSTEM_POWER_INFORMATION

    我正在尝试编写一个小程序 该程序作为服务运行并监视用户是否处于活动状态 如果用户空闲 没有鼠标 键盘 一个小时 则某些进程将被终止 如果用户使用 user32 dll 中的 LASTINPUTINFO 运行它 它就可以工作 但它不能作为服务
  • 手动更改postgresql中查询的执行计划?

    是否可以在postgresql中手动更改执行计划的操作顺序 例如 如果我总是想在过滤之前进行排序操作 尽管这在 postgresql 的正常使用中没有意义 是否可以通过例如手动强制执行该操作改变运营的内部成本 如果我实现自己的功能呢 是否可
  • SQL命令文本到DataSet的直接方法

    如果我有 sql 命令 获取数据集的最直接途径是什么 string sqlCommand SELECT FROM TABLE string connectionString blahblah DataSet GetDataSet sqlCo
  • Oracle如何将UTC时间转换为本地时间(缺少偏移信息)

    我有一个包含日期列的表 我认为该列中的日期是以 UTC 格式保存的 我希望检索日期时以当地时间打印 这意味着当我从德国调用日期时 结果应该是这样的 2015 04 29 11 24 06 0200UTC EUROPE BERLIN 我尝试了
  • sql server 2008 对 exec 语句的限制

    我只需要仔细检查 t sql 中的 EXEC 命令是否有字符限制 如果我有一个带有 varchar max 的变量并使用 EXEC 执行命令 你认为这样可以吗 thanks 应该没问题 根据这篇 MSDN 文章 http msdn micr
  • Sql Server 的夏令时

    我们正在使用一个以 C Unix 格式存储日期的旧应用程序 C 时间基本上是自 1970 年 1 月 1 日以来的秒数 日期以整数形式存储在 SQL Server 数据库中 我正在为使用这些日期的报告编写视图 到目前为止 我正在使用以下命令
  • 将图像列保存到 SQL Server 2000 中的文件

    我在 SQL Server 2000 中有一个包含图像列的表 我需要将图像数据保存到文件系统上的文件中 在 SQL Server 2005 中 我可以使用 ADODB Stream 对象进行文件 I O 但这在 SQL Server 200
  • 策略模式还是命令模式?

    假设我有一个金融交易列表 我需要针对这些交易执行一系列验证规则 一个例子是我有一笔购买产品的交易 但是首先我需要验证交易中的帐户是否有足够的可用资金 产品没有售完等 由于这些规则 交易将是标记为拒绝 并应指定错误代码 当然 我正在考虑用一个
  • 如何将 sql 数据输出到 QCalendarWidget

    我希望能够在日历小部件上突出显示 SQL 数据库中的一天 就像启动程序时突出显示当前日期一样 在我的示例中 它是红色突出显示 我想要发生的是 当用户按下突出显示的日期时 数据库中日期旁边的文本将显示在日历下方的标签上 这是我使用 QT De
  • Magento 设置脚本中的 ALTER TABLE 不使用 SQL

    乔纳森 戴 https stackoverflow com users 336905 jonathan day says 更新不应采用以下形式 SQL命令 我没遇到过 任何 DDL 或 DML 语句不能 通过 Magento 的配置执行 结
  • 从另一个 FORM 中取回隐藏的 FORM

    我有两种形式Form1 and Form2 我正在打开Form2 from Form1 on button Click Form2 obj2 new Form2 this Visible false obj2 Show 然后我想回来Form
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • REGEXP_REPLACE - 仅当包含在 () 中时才从字符串中删除逗号

    我在 oracle 论坛网站找到了一个例子 输入字符串 a b c x y z a xx yy zz x WITH t AS SELECT a b c x y z a xx yy zz x col1 FROM dual SELECT t c
  • Nhibernate:连接表并从其他表获取单列

    我有以下表格 create table Users Id uniqueidentifier primary key InfoId uniqueidentifier not null unique Password nvarchar 255
  • 将 dll 注册到 GAC 或从 ASP.NET 中的 bin 文件夹引用它们是否更好

    如果答案是 视情况而定 您能否提供一个简短的解释 GAC 旨在包含以下组件跨多个应用程序共享 如果是这种情况 您应该对程序集进行强命名并向 GAC 注册 如果不是 请将程序集保留为私有程序集并将其作为项目 dll 引用进行引用 PS 没有真

随机推荐

  • 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 中抛出异常时 如果特定查询没有返回数据或找不到数据 我应该使用什么类型的异常 伪代码 阅读 不要仔细检查