为了向我们的应用程序中添加一些参数验证和正确的用法语义,我们尝试向.NET应用程序中添加正确的异常处理。
我的问题是:如果特定查询没有返回数据或找不到数据,则在ADO.NET中引发异常时,应使用哪种类型的异常?
Psuedocode :(阅读,不要仔细检查代码的语义,我知道它不会编译)
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; }
在MSDN准则状态:
考虑抛出驻留在系统名称空间中的现有异常,而不是创建自定义异常类型。
如果您所遇到的错误情况可以通过编程方式与其他任何现有异常处理方式不同,请创建并引发自定义异常。否则,抛出现有异常之一。
不要仅仅为了拥有团队的例外就创建和抛出新的例外。
没有硬性规定:但是,如果您有一种不同的方式来处理此异常,请考虑创建一个自定义异常类型,例如Johan Buret建议的DataNotFoundException 。
否则,您可能会考虑抛出现有的异常类型之一,例如System.Data.DataException甚至可能抛出System.Collections.Generic.KeyNotFoundException。