c# - 在 C# 中检测 MySQL“超时过期”错误的正确方法是什么?
问题描述
我想在我的应用程序中为 Data.MySqlClient 抛出的“超时过期”异常设置一个特殊情况。比检查异常的“消息”属性更好的检测方法是什么?
我尝试检查异常的“数字”属性的值 2013(我通过谷歌搜索找到的唯一一个),但它似乎并非在所有情况下都有效。编辑:做了一些额外的调试并发现,有时(即,当客户端发生超时时)数字== 0(这个数字也可以表示任何客户端错误)。
我当前的代码如下所示:
// connection is defined as new MySqlConnection
using(var transaction = connection.BeginTransaction(isolationLevel))
{
try
{
using (var cmd = connection.CreateCommand())
{
cmd.Transaction = transaction;
cmd.CommandType = CommandType.Text;
cmd.CommandText = query;
cmd.ExecuteNonQuery();
transaction.Commit();
}
}
catch (Exception ex)
{
if (transaction != null && connection.State != ConnectionState.Closed)
{
transaction.Rollback();
}
log?.ErrorFormatExt(
"An error occurred during query execution. All changes canceled.{1}{0}{1}{2}", ex, Environment.NewLine,
query); // log is log4net.ILog.
if (ex is MySqlException mySqlException && mySqlException.Number == TIMEOUT_NUMBER)// const int TIMEOUT_NUMBER = 2013
{
// Do special case stuff. Some nasty legacy code you surely don't want to see.
}
}
}
基本上我有时会看到日志条目(当然,带有“超时”文本),但没有看到任何特殊情况。尽管问题可能出在“特殊情况”部分,但现在我想确保我正在以正确的方式进行检查。
解决方案
推荐阅读
- javascript - Javascript 使用 forloop 对数据进行分组
- docker - Terraform Docker Provider:将端口“绑定”到特定网络
- winapi - 如何在 node-ffi 中使用 EnumProcesses
- mysql - 无法将现有 sql 文件导入空数据库:db_name.table_name 不存在
- javascript - 如何使用javascript从MSSQL api调用确定数组中是否存在具有特定值的记录
- javascript - 使用map函数时如何定义数组的长度并显示有数据的行?
- c - 当 f(0) 没有返回值时,递归函数给出输出
- react-native - 创建实例时反应本机错误
- python - 更多pythonic方法来删除熊猫数据框中一个值以另一行的值开头的行
- mongoose - 在 @nestjs/mongoose 中设置 mongoose 全局选项