自定义异常并抛出c#
本文关键字:自定义异常 | 更新日期: 2023-09-27 18:27:35
我有以下代码:
public DataTable executeQuery(string querySql, List<MySqlParameter> parameters)
{
try
{
using (connectionLocal = getConnection())
{
connectionLocal.Open();
MySqlCommand command = new MySqlCommand(querySql, connectionLocal);
command.CommandType = System.Data.CommandType.Text;
foreach (MySqlParameter param in parameters)
{
command.Parameters.Add(param);
}
MySqlDataAdapter dataAdapter = new MySqlDataAdapter(command);
DataTable dataTable = new DataTable();
dataAdapter.Fill(dataTable);
dataTable.TableName = "tabla";
return dataTable;
}
}
catch (Exception e)
{
throw new DAOException("tst",e);
//return null;
}
}
而且。。。
public class DAOException : Exception
{
public DAOException(String msg, Exception inner)
: base(msg, inner)
{
MessageBox.Show("Ocurrio un problema... Por favor contacta al administrador!"); return;
}
}
但当异常发生时,会出现以下情况:
http://s17.postimg.org/6quh6xs6n/daoex.png
我想知道用尝试接球投球的正确方法是什么。
谢谢!!!
处理异常的位置是catch
块,而不是异常类本身。因此,您可以在catch块中显示MessageBox并终止应用程序(例如,通过Application.Exit()
)。
Exception
类不过是一个数据容器,可以获取有关所发生错误的信息。通过抛出异常,你会说"我无法处理这种情况,其他人(调用者)应该处理!"然后你使用Exception
类来提供有关发生了什么以及在哪里发生的信息。
可以(或希望)处理此异常的代码实现try....catch
块。它捕获异常,并记录Message
和StackTrace
等信息。
如果任何人都没有捕捉到异常,它最终将导致整个应用程序崩溃,操作系统将通过创建转储等来处理。
在catch块中,您捕获了之前抛出的Exception,然后抛出了一个新的DAOException,您在任何地方都不处理它。
你到底想做什么?
如果您只想记录错误消息或将其显示给用户,您可以通过MessageBox调用修改捕获块:
catch (Exception e)
{
MessageBox.Show("Ocurrio un problema... Por favor contacta al administrador!");
return null; // or Application.Exit(); or other code you want
}
有一个关于异常抛出设计和缓存的指导原则。请记住,抛出异常后,内存和当前上下文中的数据可能会损坏。然后您必须处理这种情况或终止应用程序。
有很多关于异常处理的材料,它实际上不仅仅是一个答案的主题。例如,最好至少向用户显示异常消息,或者将异常详细信息记录到日志文件中,以便将来进行调试。