不支持关键字:';附件bFileName';-MDF数据库文件(C#)

不支持关键字:';附件bFileName';-MDF数据库文件(C#),c#,database,sql-server-ce,connection-string,C#,Database,Sql Server Ce,Connection String,我正在尝试连接到我的.MDF文件,但无法完成。我尝试了连接字符串的各种变体,但仍然得到相同的错误 这是app.config中的我的连接字符串 <connectionStrings> <add name="DBConnection" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\iseo-db.mdf;Integrated Sec

我正在尝试连接到我的
.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>
每当我尝试执行时,我都会得到一个异常

不支持关键字:“attachdbfilename”


我非常感谢您对这个问题的帮助。

据我所知,SQL Server CE不使用
mdf
文件,而使用
sdf
文件。此外,您不必使用属性
AttachDbFilename
,只需使用属性
数据源=…

 <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
如果您使用的是LocalDB,则应使用
SqlConnection
。LocalDB不是SQL Server compact edition。它是完整的SQL Server

Compact edition已弃用,您不应该使用它。根据文档,如果您想要像compact edition一样的“本地文件”数据库,则可以使用LocalDB。但它与完整的SQL Server提供程序配合使用。这就是为什么您会遇到此异常

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

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

SqlConnection con = new SqlConnection(connection);

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

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

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

SqlConnection con = new SqlConnection(connection);

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

.mdf
是完整SQL Server的数据库文件,而不是SQL Server CE。完整的SQL Server仅在SQL Server Express edition中支持
AttachDbFileName=
语句。对于SQL Server CE,您需要使用一个
.sdf
数据库文件,并且在连接字符串中使用另一个
providerName
,因为
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的原始配置应该可以正常工作。迁移回不推荐使用的配置并不是一个好主意,无论它是否工作。因此,这不是问题的解决办法。
private string connection ="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\iseo-db.mdf;Integrated Security=True" 

SqlConnection con = new SqlConnection(connection);