'System.Data.IDbConnection'到'System.Data.SqlClient.SqlConnection'

时间:2013-07-16 21:23:39

标签: c# .net

protected override IDbCommand GetDbCommand(string key, IDbTransaction transaction)
{
    if (transaction == null)
    {
        return base.GetDbCommand(key);
    }
    return new SqlCommand { Connection = transaction.Connection, Transaction = transaction };
}

尝试压缩上述代码时出现以下错误。

  

无法隐式转换类型' System.Data.IDbConnection'至   ' System.Data.SqlClient.SqlConnection&#39 ;.存在显式转换   (你错过了演员吗?)

1 个答案:

答案 0 :(得分:6)

错误信息是不言自明的。您的方法采用IDBTransaction,它的Connection属性返回IDBConnection,这是所有连接类型实现的接口,而不仅仅是SqlConnection

您可以将其强制转换为SqlConnection,但如果有人尝试将您的方法用于不同的事务类型,则会容易出错,因为这会导致运行时异常。

但您可以使用Connection.CreateCommand

protected override IDbCommand GetDbCommand(string key, IDbTransaction transaction)
{
    if (transaction == null)
    {
        return base.GetDbCommand(key);
    }
    var cmd = transaction.Connection.CreateCommand(); 
    cmd.Transaction = transaction; 
    return cmd;
}