我正在努力解决几天前发生的一个奇怪错误,而我找不到解决方案。
我有一个C#Form应用程序,它与Visual Studio Express(.mdf文件)制作的SQL数据库进行通讯。如果我的连接字符串指向根目录中的数据库(VS已在其中自动创建数据库),则一切正常。我可以在“调试和发布”中编译可执行文件。

为了在另一台机器上进行测试(我在其中复制了可执行文件和数据库.mdf),我更改了连接字符串,以指向同一可执行目录中的数据库,在这种情况下,它不起作用(发布和调试)。

我来到我的电脑,使用上面相同的连接字符串,指向的不是根目录中的DB,而是发布目录中的DB。

奇怪的是,它可以在调试中工作,但不能在发行版中工作。

发生错误的是以下一个


  例外:一个或多个文件与该文件的主文件不匹配
  数据库。如果您尝试附加数据库,请重试
  使用正确的文件进行操作。如果这是现有数据库,
  该文件可能已损坏,应该从备份中还原。可以
  无法打开新数据库'C:\ USERS \ TEST \ VISUAL
  工作室\项目\莱昂纳多\莱昂纳多
  0.1.1.1 \ LEONARDO \ BIN \ RELEASE \ DB.MDF'。 CREATE DATABASE被中止。尝试为文件C:\ Users \ Test \ Visual附加一个自动命名的数据库
  Studio \ Projects \ Leonardo \ Leonardo 0.1.1.1 \ Leonardo \ bin \ Release \ DB.mdf
  失败了存在具有相同名称的数据库,或者指定的文件不能
  被打开,或者它位于UNC共享上。日志文件
  'C:\ Users \ Test \ Visual Studio \ Projects \ Leonardo \ Leonardo
  0.1.1.1 \ Leonardo \ bin \ Release \ DB.ldf'与主文件不匹配。它可能来自其他数据库,或者日志可能已重建
  先前。


和代码是

string Result = string.Empty;

            SqlConnection conn = new SqlConnection(Settings.DataBasePath);

            try
            {

                conn.Open();
            }
            catch (Exception ex)
            {
                string Errore = String.Format("Exception: {0}", ex.Message);

                MessageBox.Show(Errore);

                throw;
            }

            SqlDataReader leggi = null;

            //SqlCommand comando = new SqlCommand("SELECT " + "Database Version" + " FROM Data", conn);
            SqlCommand comando = new SqlCommand("SELECT * FROM Data", conn);

            leggi = comando.ExecuteReader();


            while (leggi.Read())
            {
                Result += leggi["Database Version"].ToString().TrimEnd();
            }

            conn.Close();


最好的祝福

最佳答案

您的问题在这里:

Log file 'C:\Users\Test\Visual Studio\Projects\Leonardo\Leonardo 0.1.1.1\Leonardo\bin\Release\DB.ldf' does not match the primary file.


您应该确保您的调试和发布文件夹包含相同的.mdf和.ldf文件。

10-08 02:36