我正在将我的一个 Asp.Net 项目中的数据访问代码从 MySQL 转换为 MSSQL。我借此机会尝试删除对提供者特定类或命名空间的任何依赖。
因此,我没有直接使用 MySqlCommand 或 SqlCommand 类,而是使用 DbProviderFactories.GetFactory() 方法返回 DbCommand 对象。
我遇到的一个问题是我有捕获 MySqlExpection 异常的代码。我想要一种与提供者无关的方法来捕获 Sql 异常。这可能吗?
如果对该主题没有深入的了解,我的想法是异常是从提供数据库访问权限的具体类中抛出的。我可以猜测,一些例外可能在本质上很常见,但其他可能不常见。我相信虽然记录特定错误而不是一些抽象是一个好习惯。
检查这个 SO question和MSDN了解更多信息。
我会推荐这样的东西。这样,您既可以抛出一个通用的 sql 异常,也可以抛出与给定逻辑 pe、ConnectionTimedOutException 关联的自定义异常。
catch(Exception ex)
{
if(DbProviderFactories.GetException(ex) is CustomSQLException)
{
//logic here
}
throw;
}
//Factory method
public Exception GetException(Exception ex)
{
Exception result;
//Identifying which is the current one
switch (CurrentProvider)
{
case Provider.SQLServer:
//logic here
result = new CustomSQLServerException(ex); //which extends CustomSQLException
break;
default:
result = ex;
break;
}
return result;
}
Sql 实现 DBexception。我假设 MSSQL 也可以。
你试过DBexception吗?
我没有要测试的 MSSQL。