我收到了这段代码:
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,它将是同样的:由于没有互联网连接,我得到了一个例外。
有什么想法吗?
答案 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}}未
答案 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
}