【问题标题】:Best practice to retrieve error message from database从数据库中检索错误消息的最佳实践
【发布时间】:2015-06-14 18:47:22
【问题描述】:

我们的数据库表中有错误消息列表,当我们遇到一些业务验证错误时,我们会从表中获取这些错误消息。 例如如果在 c# 代码中我们发现计算的风险百分比大于允许值,则使用以下代码时

string sError = GetErrorText(6610);  // get error message from application cache
DisplayErrorPopup(sError ); // load a popup to display error to user.

现在我们发现在某些情况下我们必须验证存储过程中的一些规则。例如“工人没有活跃的主管。”

我的问题是,当数据库中发生验证时,我们应该如何处理这种情况? A. 我们是否应该返回错误文本“工人没有活跃的主管”。作为 SP 的输出参数并将其传递给 DisplayErrorPopup
OR
B. 返回错误 id(存在于表中),然后使用 GetErrorText(834),然后将文本传递给 DisplayErrorPopup;

我的担忧是
1. 是否有任何行业标准来处理错误消息和文本的最佳实践。
2. 当我们有返回数字的选项时,从数据库返回字符串/varchar有什么缺点吗?

请指导我。

【问题讨论】:

  • 如果您唯一需要做的就是显示错误消息,那么我认为最好通过存储过程的输出参数直接返回字符串。如果您返回一个 ID,那么您需要再次调用以将文本从数据库中取出。
  • 嗨@Steve:这就是诀窍。我们不必再次访问数据库,因为所有错误消息都已加载到应用程序变量中。

标签: c# database oracle11g


【解决方案1】:

我建议在 SQL 中抛出(引发)一个自定义错误(如果您愿意,您可以从表格中选择文本)并让您的应用程序捕获该错误。这将允许您让您的应用程序根据它们的严重程度来决定如何处理不同的错误。

        using (SqlConnection conn = new SqlConnection(connection))
        {
            SqlCommand sqlCommand = new SqlCommand(query, conn);
            sqlCommand.CommandTimeout = timeout;
            sqlCommand.CommandType = CommandType.Text;
            conn.Open();
            object result = sqlCommand.ExecuteScalar();

            return result;
        }

在 try catch 块中运行上述代码可以让您在 C# 应用程序中更优雅地处理错误

【讨论】:

    【解决方案2】:

    您的两个选项同样正确。您可以从数据库返回错误文本,或者返回一些错误代码并根据您的应用程序中的代码显示错误消息。

    另外,请尝试 codeproject 中的this atricle,因为它具有行业标准和最佳实践来处理详细解释的错误消息和文本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      相关资源
      最近更新 更多