【问题标题】:Connecting to SQL CE db using SQLConnection使用 SQLConnection 连接到 SQL CE 数据库
【发布时间】:2009-04-27 11:32:54
【问题描述】:

很简单的问题。我正在构建一个从 SQL Server 2005 实例读取数据的应用程序。我想在我的笔记本电脑(没有 SQL 2005)上运行一些测试,所以我正在考虑在本地数据库中进行交换以进行测试。

我使用的是 VS2008,因此精简版 DB 似乎是一个自然的选择。我曾希望只换掉我的连接字符串,但似乎它只会让我使用 SqlCeConnection 而不是 SqlConnection 连接到 CE 数据库。有什么办法,我可以在连接字符串中使用修饰符吗?

【问题讨论】:

    标签: c# sql-server-ce connection-string


    【解决方案1】:

    实际上很可能通过仅修改配置参数来使用 SQL CE 而不是成熟的 SQL Server:更改连接字符串并尽可能使用IDbXXX 系列接口,而不是特定于平台的SqlXXXSqlCeXXX 接口。见DbProviderFactories

    但是,请注意这两个平台的 SQL 方言的差异。

    【讨论】:

    • 你知道突出“方言差异”的好链接吗?如果有一个页面列出了 SQL Server 中不支持的主要内容,那将非常有用。
    【解决方案2】:

    是的,您可以通过引用基类来使用 SQL Compact 和/或 SQL Server。例如:

    IDbConnection Connection;
    
    if (Compact)
        Connection = new SqlCeConnection();
    else
        Connection = new SqlConnection();
    

    连接字符串需要指向您的 SQL Compact 数据文件,例如:"Data Source=urData.sdf;Persist Security Info=False;"。更多examples here.

    此链接将解释 differences there are between SQL Server and SQL Compact 的含义,因为它并不相同。

    【讨论】:

    • 感谢您提供有关方言差异的额外信息,这很有用。我认为示例代码也可以工作,但不如避免显式类引用和使用 DbProvider 工厂以及使用配置来管理连接类型那样干净(必须明确引用 CE 连接类型)(根据所选答案)。
    【解决方案3】:

    任何一个 DB 所需的所有 SQL 相关对象都继承自基本抽象 Db...(即 DbConnection、DbDataAdapter 等...)。因此,您可以编写某种 DatabaseManager 类,在实例化时需要知道您是在处理 Sql 还是 Sql Ce。然后,从那时起,您只需处理基类对象(DbConnection 等)。这样,您每次只需要更改经理类的实例即可。

    这样做的另一个好处是,如果您以后决定完全切换到另一个提供程序,则不需要更改太多代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多