1

这是我的 DAL,我即将尝试/捕获代码,由于这个概念在我身上并没有发展壮大,我有以下疑问。它真正做某事的一次是在ExecuteSQL方法中。所以,我会试一试/赶上。但是我还应该在GetLineaUpdateLinea中添加吗?我只能想到那里很奇怪的错误。

此外,如果您对此代码有任何清理建议,我很乐意听到。谢谢。

namespace DAL
{
    public class Connection
    {
        public string GetNewConnection(string server)
        {
            return ConfigurationManager.ConnectionStrings[server].ConnectionString;
        }

        public DataSet ExecuteSQL(string sp)
        {
            DataSet ds = new DataSet();
            string connectionString = GetNewConnection("BO");
            SqlConnection conn = new SqlConnection(connectionString);
            SqlCommand command = new SqlCommand(sp, conn);
            command.CommandType = CommandType.StoredProcedure;
            SqlDataAdapter da = new SqlDataAdapter(command);
            using (conn)
            {
                da.Fill(ds);
            }
            return ds;
        }
    }
    public class LineaDAL
    {
        Connection obj = new Connection();
        public DataSet GetLinea()
        {
            DataSet ds = new DataSet();
            string sp;
            sp = "sp1";
            ds = obj.ExecuteSQL(sp);
            return ds;
        }

        public bool UpdateLinea(string reclamo)
        {
            DataSet ds = new DataSet();
            string sp;
            sp = "sp2";
            ds = obj.ExecuteSQL(sp);
            return ExtensionMethods.IsEmpty(ds);
        }
    }

    public static class ExtensionMethods
    {
        public static bool IsEmpty(this DataSet ds)
        {
            return ds == null ||
              !(from DataTable t in ds.Tables where t.Rows.Count > 0 select t).Any();
        }
    }

}
4

4 回答 4

3

与任何异常处理一样,它实际上取决于您将如何处理它。经常使用 try/catch 来捕获可能的错误以防万一。但是,实际上你应该很少尝试/捕获,除非你想捕获特定的东西并正确处理它(用自定义消息通知用户该错误)。如果你对 catch 没有任何意义,那么让它冒泡到顶级异常处理程序。那至少是我的 2 美分

这是关于异常处理的更深入的文章

于 2012-07-11T12:31:01.740 回答
1

使用数据库访问,尝试/捕获/最终总是一个好主意:

尝试执行您的数据库操作(选择、插入、更新、删除或 whaetever)

捕捉任何错误(数据库连接丢失,无效的 sql,......你永远不会知道)

最后清理一切(必要时丢弃连接,...)

并不是因为你只能想出“奇怪的错误”,所以一切都会顺利进行。您的应用程序有责任处理错误,并通知用户出了什么问题(即告诉用户检查他的网络连接)。

希望有帮助:)

于 2012-07-11T12:30:59.727 回答
1

好吧,GetLinea考虑UpdateLinea到他们执行 SQL 查询可能会失败。

但是,无论是否从它们那里捕获异常,您都必须根据问题的答案来决定:异常是否发生在该方法中的致命错误?如果是,请不要处理它try/catch并让它使您的程序失败(致命错误)。否则将它们也插入里面try/catch

清理某些东西使用 finally 块

try {
...
}
catch(Exception ex)
{
  ...
}
finally {

 .. cleanup...
}

无论是否有异常,都可以保证(在大多数情况下)执行。

于 2012-07-11T12:31:47.780 回答
1

记录错误是个好主意。

就像是:

try
{
...
}
catch(Exception ex)
{
    Log(ex.Message);
    MessageBox.Show("Error Occured. Please try again later."); //General message to the user 
}
finally
{
    Cleanup... like Disposing objects (like com objects) if they need to be disposed.
}

您可以使用 Log4Net 之类的东西进行登录,但也可以构建自己的记录器。

如果您认为这段代码可能导致错误,那么使用 try/catch 是一个很好的做法,即使您确定您已经处理了可能导致错误的条件。在您的情况下,为什么不使用,只是为了确保如果发生异常,则对其进行处理。

于 2012-07-11T12:57:34.077 回答