c#SQL)在附加了在另一台计算机(服务器)中创建的.mdf文件后,无法打开物理文件(MS localdb.mdf)



我正在用Microsoft localdb(.mdf)开发Windows桌面应用程序(C#WPF),我希望我的软件用户在移动到其他地方(计算机)时可以携带他们的localdb(.mdf)文件。localdb(.mdf)文件是在第一台计算机上创建的。

为了测试我的应用程序,我将localdb文件从计算机A复制到计算机B,并成功地附加了以下代码。

string attach_greendbnameQuery = string.Format(@"EXEC sp_attach_db @dbname = N'greendb_{0}', @filename1 = N'{1}greendb_{0}.mdf'", textBoxGreenLogin.Text, Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString());
SqlCommand attach_greendbnamecomm = new SqlCommand(attach_greendbnameQuery, check_datadbinmasterConn);
attach_greendbnamecomm.ExecuteNonQuery();

我可以读取数据并将数据写入移动的localdb文件中。然而,当我在这个数据库上运行backup命令时,会发生异常,比如,"无法打开物理文件,操作系统错误32,进程无法打开该文件,因为另一个进程正在使用该文件"

如果我进入Server Management Studio-Security KayLee PC\KayLee-User Mapping,所有其他localdb的用户都是"dbo",但只有手动移动数据库的用户是KayLee PC\KayLee,并且只有"public"被选中,所有其他数据库角色(包括db_owner)都没有被选中。(我总是使用KayLee PC\KayLee帐户启动(登录)Windows(O/S))我试图将所有角色都检查为数据库角色,甚至检查为服务器角色,但失败了。甚至,我试图通过下面的代码删除用户KayLee PC\KayLee,但异常消息显示为,

"用户"KayLee PC\KayLee"在当前数据库"中不存在

如果我在Server Management Studio中单击该数据库,则当前数据库状态不会更改为单击的数据库,子树节点(如表、安全性等)也不会显示消息"无法访问数据库",即使我单击其他数据库,当前数据库状态也会更改为单击数据库。

此外,我试图通过下面的代码更改localdb(数据库)的所有者,但似乎执行失败,结果为"-1"one_answers"sa",当尝试使用"KayLee PC\KayLee"时,我总是登录到Windows O/S,错误消息是"KayLee PC/KayLee已经是这个数据库的所有者(存在)"

SqlConnection dbownerchange_Conn = new SqlConnection();
dbownerchange_Conn.ConnectionString = dbownerchange_ConnectionString;
dbownerchange_Conn.Open();
SqlCommand dbownerchange_comm = new SqlCommand();
dbownerchange_comm.Connection = dbownerchange_Conn;
dbownerchange_comm.CommandText = "EXEC sp_changedbowner 'sa'";
dbownerchange_comm.ExecuteNonQuery();
dbownerchange_Conn.Close();

简单地说,如果我们需要将Microsoft localdb文件移动(复制)到另一个地方(计算机),我如何才能成功地做到这一点?我们必须在移动localdb文件之前分离吗?如果是这样的话,我担心总有人不按照指导方针运行分离函数。

我已经尝试了几种场景来了解SQL server是如何工作的。结论是,我们需要先分离,然后重新连接到相同或不同的机器(计算机)上。然后,我本可以成功地转移到另一台电脑上。

然而,将localdb备份并恢复到另一台机器(计算机)的单个过程是不起作用的。此外,如果我们首先分离localdb(数据库文件.mdf),SQL server将不再识别localdb数据库,并且我们无法为localdb运行备份命令。

总之,简单地说,如果我们想将localdb(microsoft database.mdf文件)移动到其他本地服务器(计算机、机器),我们只需要将localdb从计算机A的master数据库中分离出来,复制文件并重新连接到计算机B的另一个master数据库。

希望这能帮助其他人。。

相关内容

  • 没有找到相关文章

最新更新