在Winforms

时间:2015-11-03 15:02:07

标签: c# sql winforms exception try-catch

我收到了这段代码:

try
{
    using (SqlConnection sourceCnx = new SqlConnection(SOURCE_CONN_STRING))
    {
        sourceCnx.Open();
        SqlCommand sysCmd = sourceCnx.CreateCommand();
        sysCmd.CommandText = "My query";
        sysCmd.ExecuteNonQuery();
    }
}
catch (Exception)
{
    //Throwing a message box informing that there is an error
}

我想在用户不再连接到互联网时显示消息。 但是当我在没有互联网连接的情况下调试程序时,程序会因SqlException而崩溃。 (" catch"块没有捕获异常)

我尝试在catch (SqlException) { // code }之前添加catch (Exception),但它不起作用。 我仍然有一个例外,而不是catch块显示的消息。

我不知道该怎么办,因为如果我创建了一种测试互联网连接的方法(try ping google.com),那么如果确定,则返回true,它将是同样的:由于没有互联网连接,我得到了一个例外。

有什么想法吗?

5 个答案:

答案 0 :(得分:1)

您可能希望将异常处理放在using块中,如下所示:

using (SqlConnection sourceCnx = new SqlConnection(SOURCE_CONN_STRING))
    {
        try
        {
            sourceCnx.Open();
            SqlCommand sysCmd = sourceCnx.CreateCommand();
            sysCmd.CommandText = "My query";
            sysCmd.ExecuteNonQuery();
        }
        catch (SqlException e)
        {
            // This will catch any SQL Exceptions.
            // Use "throw;" if you want to rethrow the exception up the stack
        }
        catch (Exception e)
        {
            // This will catch any other exceptions.
            // Use "throw;" if you want to rethrow the exception up the stack
        }
    } 

假设您实际上已经替换了#34;我的查询"使用特定于您的方案的东西,SqlException很可能是由于您的计算机无法看到SQL Server实例。试着ping它......

答案 1 :(得分:1)

试试这个:

try
{
    using (SqlConnection sourceCnx = new SqlConnection(SOURCE_CONN_STRING))
    {
        sourceCnx.Open();
        SqlCommand sysCmd = sourceCnx.CreateCommand();
        sysCmd.CommandText = "My query";
        sysCmd.ExecuteNonQuery();
    }
}
catch(SqlException sqlEx)
{
    MessageBox.Show("there was a sql issue");
}
catch(Exception ex)
{
    MessageBox.Show("there was some other issue");
}

答案 2 :(得分:1)

您已将环境设置为在抛出CLR异常时始终中断。如果您愿意,可以保留它,然后按F5继续执行您的程序。或者您可以将其关闭(默认情况下已关闭):

转到Debug菜单,选择Exceptions并确保<{1}}未

enter image description here

答案 3 :(得分:0)

在catch代码的部分,你必须设置一个变量吗?然后拿走她的任何财产。

例如:

try
{
using (SqlConnection sourceCnx = new SqlConnection(SOURCE_CONN_STRING))
    {
        sourceCnx.Open();
        SqlCommand sysCmd = sourceCnx.CreateCommand();
        sysCmd.CommandText = "My query";
        sysCmd.ExecuteNonQuery();
    }
} 
catch (Exception ex) 
{ 
      //example 
      MessageBox.show(ex.message);
}

答案 4 :(得分:0)

我认为你应该得到BaseException

catch (Exception exp)
    {
        if (exp.GetBaseException() is System.Data.SqlClient.SqlException)
        {
            var sqlException = exp.GetBaseException() as System.Data.SqlClient.SqlException;

            if (sqlException != null && sqlException.Number == 547)
            {
                //do something
            }
        }
        //do something
    }