【问题标题】:SqlConnection DBConnection WindowsceSqlConnection DBConnection Windowsce
【发布时间】:2013-04-19 10:20:12
【问题描述】:

我正在 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。

谢谢

【问题讨论】:

    标签: compact-framework windows-ce dbconnection mysqlconnection


    【解决方案1】:

    您正在尝试做的是Covariance and Contravariance in Generics,但直到 .NET 4.0 才出现。

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

    如果您真的想完成它,请查看 SO 上的这个线程,其中包含一些很好的 How To code:

    C# DbConnection cast to SqlConnection

    【讨论】:

    • 不好意思我没看懂,SqlConnection继承自DbConnection,为什么我不能写:DbConnection dbCn = new SqlConnection() ???????
    • 对不起,现在我明白了,问题是编译器在编译时不知道什么是正确的对象。获得所需结果的一些想法(即类似于 DbPoviderfactory 的东西)?谢谢。
    • 好的,使用接口,比如 IDbConnection。
    • 对不起。我已经远离电脑了。我发现了一些我作为更新发布的详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    相关资源
    最近更新 更多