如何根据显示的错误设置自定义错误消息?
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,则应发布完整的错误消息。
答案 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;
}
}
但我会建议您使用错误编号捕获异常,因为这样可以为您提供干净的代码,并且会发现确切的错误。