1

我正在 Windows CE 5.0 下的 Compact Framework 3.5 中编写这段代码来处理两个不同的数据库:

using System.Data;
using System.Data.SqlClient;
using System.Data.SqlServerCe;
using System.Data.Common;

public myClass
{
    private DbConnection dbCn;
    private DbCommand dbCmd;
    public void myClass(bool ce)
    {
        if (ce)
        {
            dbCn = new SqlCeConnection();
            dbCmd = new SqlCeCommand();
        }
        else
        {
            dbCn = new SqlConnection(); // COMPILER ERROR Cannot implicitly convert type 'System.Data.SqlClient.SqlConnection' to 'System.Data.Common.DbConnection'
            dbCmd = new SqlCommand();// COMPILER ERROR Cannot implicitly convert type 'System.Data.SqlClient.SqlCommand' to 'System.Data.Common.DbCommand'  
        }
    }

为什么它不能将 SqlXX 转换为 DbXX ??? 来自 MSDN SqlXX 是 DbXX 的孩子!顺便说一句,SqlCeXX 没问题。我不能使用 cf 中缺少的 DbPoviderfactory。

谢谢

4

1 回答 1

1

您要做的是泛型中的协变和逆变,但直到 .NET 4.0 才出现。

[更新]似乎从[DbConnection][SqlConnection]的转换可能会遗漏一些参数,因此 Microsoft 不允许简单的转换。

如果您真的想完成它,请在 SO 上查看此线程,并提供一些好的 How To code:

C# DbConnection 强制转换为 SqlConnection

于 2013-04-19T12:24:21.257 回答