【问题标题】:Keyword not supported: 'attachdbfilename' - MDF Database File (C#)不支持关键字:'attachdbfilename' - MDF 数据库文件 (C#)
【发布时间】:2018-01-26 02:17:45
【问题描述】:

我尝试连接到我的.MDF 文件,但我无法完成它。我尝试了各种不同的连接字符串,但仍然遇到同样的错误。

这是我来自 app.config 的连接字符串

<connectionStrings>
    <add name="DBConnection"
         connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\iseo-db.mdf;Integrated Security=True"
         providerName="System.Data.SqlClient" />
</connectionStrings>

这就是我如何称呼这个连接字符串

private string connection = System.Configuration.ConfigurationManager.ConnectionStrings["DBConnection"].ToString();

SqlCeConnection con = new SqlCeConnection(connection);

当我每次尝试执行时,我都会收到一个异常提示

不支持关键字:'attachdbfilename'

对于这个问题的任何帮助,我将不胜感激。

【问题讨论】:

  • .mdffull SQL Server - NOT SQL Server CE 的数据库文件。并且完整的 SQL Server 支持 SQL Server Express 版本中的AttachDbFileName= 语句only。对于 SQL Server CE,您需要在连接字符串中使用 .sdf 数据库文件和另一个 providerName

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


【解决方案1】:

据我所知,SQL-Server CE 不使用mdf 文件,而不是sdf 文件。此外,您不必使用属性AttachDbFilename,然后只需使用属性Data Source=...

 <add name="DBConnection"
      connectionString="Data Source=|DataDirectory|/iseo-db.sdf;Integrated Security=True"
      providerName="System.Data.SqlServerCe.4.0" />

这样的事情应该可以解决问题。

编辑

根据@marc_s,数据提供者也必须更改为:System.Data.SqlServerCe.4.0

【讨论】:

  • providername 错误 - 对于 SQL Server CE 4.0,它必须是 providerName="System.Data.SqlServerCe.4.0"
  • 据我所知,OP 使用的是 LocalDB 而不是 SqlServerCe.4.0。这个答案是完全错误的。
  • @Jordan 但为什么它比它更有效?请告诉我我应该在答案中“纠正”什么。
  • @BendEg 我只是说 LocalDB 和 SqlServer CE 是两个不同的东西。后者已弃用。 LocalDB 使用 mdf 文件,它使用 System.Data.SqlClient 作为它的提供者。 OP 的原始配置应该可以工作。迁移回已弃用的配置无论是否有效都不是一个好主意。因此,这不是问题的解决方案。
【解决方案2】:

如果您使用 LocalDB,您应该使用 SqlConnection。 LocalDB 不是 SQL Server 精简版。它是完整的 SQL Server。

精简版已弃用,您不应使用它。根据文档,如果您想要一个“本地文件”数据库,您可以使用 LocalDB,就像精简版一样。但它适用于完整的 SQL Server 提供程序。这就是您收到此异常的原因。

您的配置很好。您只需将连接创建代码更改为使用SqlConnection 而不是SqlCeConnection

private string connection = System.Configuration.ConfigurationManager.ConnectionStrings["DBConnection"].ToString();

SqlConnection con = new SqlConnection(connection);

我知道你已经接受了另一个答案。我不在乎。我只是想警告人们不要继续使用 SQL Server CE。在不久的将来你会遇到麻烦。

【讨论】:

    【解决方案3】:

    当您使用.mdf 文件时,您不能使用SqlCeConnection 而应使用SqlConnection 连接到数据库。为此,您需要使用System.DataSystem.Data.SqlClient

    private string connection ="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\iseo-db.mdf;Integrated Security=True" 
    
    SqlConnection con = new SqlConnection(connection);
    

    确保您没有在代码中的任何位置使用 SqlCe。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多