SqlException 未在 Winforms 中捕获
SqlException not caught in Winforms
我得到了这个代码:
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
}
我想在用户不再连接到 Internet 时显示一条消息。
但是当我在没有互联网连接的情况下调试我的程序时,程序会崩溃并出现 SqlException。 ("catch"块没有捕获异常)
我尝试在 catch (Exception)
之前添加 catch (SqlException) { // code }
但它不起作用。
我仍然有异常而不是 catch 块显示的消息。
我不知道该怎么做,因为如果我创建一个方法来测试互联网连接(try
到 ping google.com)然后 return true 如果没问题,它将是相同的:由于没有互联网连接,我得到了一个例外。
有什么想法吗?
在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);
}
您可能希望将异常处理放在 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
}
}
假设您实际上已将 "My Query" 替换为特定于您的方案的内容,则 SqlException 很可能是由于您的计算机无法看到 SQL 服务器实例。尝试 ping 一下...
试试这个:
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");
}
您已将您的环境设置为在抛出 CLR 异常时始终中断。如果您愿意,您可以保留它并按 F5 继续执行您的程序。或者你可以关闭它(默认关闭):
转到 Debug
菜单,select Exceptions
并确保 Common Language Runtime Exceptions
未 选中。
我认为你应该得到 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
}
我得到了这个代码:
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
}
我想在用户不再连接到 Internet 时显示一条消息。 但是当我在没有互联网连接的情况下调试我的程序时,程序会崩溃并出现 SqlException。 ("catch"块没有捕获异常)
我尝试在 catch (Exception)
之前添加 catch (SqlException) { // code }
但它不起作用。
我仍然有异常而不是 catch 块显示的消息。
我不知道该怎么做,因为如果我创建一个方法来测试互联网连接(try
到 ping google.com)然后 return true 如果没问题,它将是相同的:由于没有互联网连接,我得到了一个例外。
有什么想法吗?
在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);
}
您可能希望将异常处理放在 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
}
}
假设您实际上已将 "My Query" 替换为特定于您的方案的内容,则 SqlException 很可能是由于您的计算机无法看到 SQL 服务器实例。尝试 ping 一下...
试试这个:
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");
}
您已将您的环境设置为在抛出 CLR 异常时始终中断。如果您愿意,您可以保留它并按 F5 继续执行您的程序。或者你可以关闭它(默认关闭):
转到 Debug
菜单,select Exceptions
并确保 Common Language Runtime Exceptions
未 选中。
我认为你应该得到 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
}