2

我正在将我的一个 Asp.Net 项目中的数据访问代码从 MySQL 转换为 MSSQL。我借此机会尝试删除对提供者特定类或命名空间的任何依赖。

因此,我没有直接使用 MySqlCommand 或 SqlCommand 类,而是使用 DbProviderFactories.GetFactory() 方法返回 DbCommand 对象。

我遇到的一个问题是我有捕获 MySqlExpection 异常的代码。我想要一种与提供者无关的方法来捕获 Sql 异常。这可能吗?

4

3 回答 3

0

如果对该主题没有深入的了解,我的想法是异常是从提供数据库访问权限的具体类中抛出的。我可以猜测,一些例外可能在本质上很常见,但其他可能不常见。我相信虽然记录特定错误而不是一些抽象是一个好习惯。

检查这个 SO questionMSDN了解更多信息。

于 2013-09-01T15:11:42.677 回答
0

我会推荐这样的东西。这样,您既可以抛出一个通用的 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;
}
于 2013-09-01T15:32:25.250 回答
0

Sql 实现 DBexception。我假设 MSSQL 也可以。
你试过DBexception吗?
我没有要测试的 MSSQL。

于 2013-09-01T18:06:35.393 回答