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

Jos*_*ner 2 .net sql ado.net exception

在尝试添加一些参数验证和正确的使用语义应用程序,我们正在试图正确的异常处理添加到我们的.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;
}
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 8

MSDN准则状态:

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

  • 如果您具有可以以与任何其他现有异常不同的方式以编程方式处理的错误条件,请创建并抛出自定义异常.否则,抛出一个现有的异常.

  • 不要创建并抛出新的异常只是为了让您的团队例外.

没有严格的规则:但是如果您有不同方式处理此异常,请考虑创建自定义异常类型,例如Johan Buret 建议的 DataNotFoundException .

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