使用 |数据目录|.

本文关键字:数据目录 使用 | 更新日期: 2023-09-27 18:30:31

我尝试在本地数据库(由基于服务的数据库添加->创建)中添加我的值。

我的代码:

//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();
            }

当我使用数据库的完整路径时,一切都没问题。在"显示数据表"中出现我的附加值。但是当我在路径中使用时 |数据目录|并按"显示数据表"中的"更新"按钮以验证是否添加了我的值,我看到了错误:"无法导入此数据库。它要么是不受支持的SQL Server版本,要么是未实现的数据库兼容性"。为什么?

使用 |数据目录|.

在连接字符串中,缺少初始目录键/值对。这意味着,当 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 服务器不是最新的。解决方法是在我的开发PC上本地安装SQL2014管理工具。

试试这个:

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