自定义异常消息C#

时间:2014-11-23 06:50:57

标签: c# sql-server exception-handling

如何根据显示的错误设置自定义错误消息?

        protected void btnNew_Click(object sender, EventArgs e)
    {
        Clear();
        SqlCommand command = conn.CreateCommand();
        SqlDataReader reader;
        try
        {
            command.CommandText = "GetMax";
            command.CommandType = CommandType.StoredProcedure;
            conn.Open();
            reader = command.ExecuteReader();                
            while (reader.HasRows)
            {
                while (reader.Read())
                {
                    int CustMax = reader.GetInt32(0);
                    CustMax++;
                    txtCustID.Text = CustMax.ToString();
                }
                reader.NextResult();
            }
            reader.Dispose();
        }
        catch (SqlException ex)
        {
            lblMessage.Text = ex.Message;

        }
        finally
        {
            command.Dispose();
            conn.Dispose();
        }
    }

在此代码块中,如果捕获到SqlException,则它的消息将显示在lblMessage中。

我正在关注的主要问题是,是否存在与数据库的连接。如果没有,则会导致以下错误"建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供者:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)"。

如果发生错误40,我想将lblMessage设置为"无法连接到数据库",但如果发生不同的SqlException,则应发布完整的错误消息。

2 个答案:

答案 0 :(得分:3)

以下是您的处理方式,

    catch (SqlException ex)
    {
        if(ex.Number == 40 ) // or Use whatever the number it returns for the relevant error
        {
             MessageBox.Show("Relevant SQL Error Occured");
        }
        else
        {
             MessageBox.Show("None Relevant SQL Error Occured:" + ex.toString());
        }
    }
    catch(Exception ex)// All other non sql errors
    {
        MessageBox.Show(ex.toString());
    }

请参阅此MSDN错误处理技术以获取更多信息Link

答案 1 :(得分:2)

您可以像

一样修改代码
catch (SqlException ex)
 {
    if(ex.Number == 40) // 40 is specific key for network issue
    {
      lblMessage.Text = "Cannot connect to database"  
    }
   else
   { 
    lblMessage.Text = ex.Message;
   }
 }

还有另一种方法可以实现像

这样的事情
catch ((SqlException ex) {
if (ex.Message.Contains("A network-related or instance-specific error specific"))//Put the matching text here  
{
     lblMessage.Text = "Cannot connect to database" 
}
else
   { 
    lblMessage.Text = ex.Message;
   }
 }

但我会建议您使用错误编号捕获异常,因为这样可以为您提供干净的代码,并且会发现确切的错误。