我正在努力解决几天前发生的一个奇怪错误,而我找不到解决方案。
我有一个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文件。