C# 使用| DataDirectory时无法导入此数据库|

C# 使用| DataDirectory时无法导入此数据库|,c#,sql,visual-studio-2013,C#,Sql,Visual Studio 2013,我尝试在由add->Service-based database创建的本地数据库中添加我的值 我的代码: //string connectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=D:\VS_MyProjects\DBAppliaction\DBAppliaction\Database1.mdf;Integrated Security=True"; string connectionString

我尝试在由add->Service-based database创建的本地数据库中添加我的值

我的代码:

//string connectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=D:\VS_MyProjects\DBAppliaction\DBAppliaction\Database1.mdf;Integrated Security=True";
            string connectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;";

            string query = "INSERT INTO [dbo].[Table] (Test) " +
                   "VALUES (@Test) ";


            // create connection and command
            using (SqlConnection cn = new SqlConnection(connectionString))
            using (SqlCommand cmd = new SqlCommand(query, cn))
            {
                // define parameters and their values
                cmd.Parameters.Add("@Test", SqlDbType.NChar, 10).Value = "test";

                // open connection, execute INSERT, close connection
                cn.Open();
                cmd.ExecuteNonQuery();
                cn.Close();
            }

当我使用数据库的完整路径时,一切正常。在“显示数据表”中显示我的附加值。但是,当我在路径| DataDirectory |中使用并按下showdatatable中的Update按钮以验证是否添加了我的值时,我看到了错误:无法导入此数据库。它要么是不受支持的SQL Server verison,要么是不受支持的数据库兼容性。为什么?

在连接字符串中,缺少初始目录键/值对。这意味着,当LocalDB附加数据库文件MDF时,将使用其完整路径名,并且在程序的后续运行中,附加失败。相反,如果提供初始目录值,后续运行只需使用该目录即可

因此,将连接字符串更改为

string connectionString = @"Data Source=(LocalDB)\v11.0;
                            AttachDbFilename=|DataDirectory|\Database1.mdf;
                            Initial Catalog=LogicalNameOfYourDatabase
                            Integrated Security=True;";

当然,第一个显然没有保存数据的问题是由DataDirectory替换字符串的行为以及Visual Studio处理附加到项目的MDF文件的方式引起的,如

中所述,我在VS2012和SQL2014中遇到了类似的问题。从本质上讲,VS中的SQL工具在SQL server中不是最新的。修复方法是在我的开发PC上本地安装SQL2014管理工具。

尝试以下方法:

string connectionString = @"Data Source=(LocalDB)\v11.0;
                        AttachDbFilename="+System.IO.Path.GetFullPath("Database1.mdf")+";
                        Initial Catalog=LogicalNameOfYourDatabase
                        Integrated Security=True;";

检查是否存在这种情况@Steve Copy if newer-结果相同请勿复制-我收到一个异常:其他信息:尝试为文件D:\VS\u MyProjects\dbapplication\dbapplication\bin\Debug\Database1.mdf附加自动命名数据库失败。存在同名的数据库,或者无法打开指定的文件,或者该文件位于UNC共享上。LogicalNameOfYourDatabase-它是什么?我应该在这里写什么?关于属性->复制到输出目录:如果更新,则复制-结果相同不复制-我收到一个异常:附加信息:尝试为文件D:\VS\u MyProjects\dbapplication\dbapplication\bin\Debug\Database1.mdf附加自动命名数据库失败。存在同名数据库,或无法打开指定的文件,或该文件位于UNC共享上。它是数据库的逻辑名称。您可以使用对数据库内容有意义的任何名称:客户、书籍、学校等等。添加逻辑名称有助于代码查找和重用以前连接的数据库。复制到输出目录值与当前问题无关。我尝试以下操作:string connectionString=@Data Source=LocalDB\v11.0;AttachDbFilename=| DataDirectory |\Database1.mdf;初始目录=测试;综合安全=真;;但错误仍然存在