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

c# SQL) unable to open physical file(MS localdb .mdf) after attaching the .mdf file which was created in another computer(server)

我正在使用 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 文件中读取和写入数据。 但是,当我在此数据库上执行 运行 备份命令时,会发生异常,例如, 'Unable to open physical file, Operating system error 32, process cannot open the file because the file is in use by another process'

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

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

如果我在 Server Management Studio 中单击数据库,当前数据库状态不会更改为单击的数据库,子树节点(如 Table、安全性等)不会显示消息 'cannot access to the database' 尽管如果我点击其他数据库,当前数据库状态会更改为已点击数据库。

此外,我尝试通过以下代码更改 localdb(数据库)的所有者,但似乎执行失败,结果为“-1”, 'sa' 并且在尝试 'KayLee-PC\KayLee' 时我总是登录 Windows O/S,错误消息类似于 'KayLee-PC\KayLee is already an owner(exist) of this database'

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 服务器的工作方式。结论是我们需要先分离并重新连接到相同或不同的机器(计算机)。然后,我可以成功地移动到另一台计算机。

但是,将localdb备份和还原到另一台机器(计算机)的单个过程不起作用。此外,如果我们先分离 localdb(数据库文件 .mdf),SQL 服务器不再识别 localdb 数据库,我们无法 运行 localdb 的备份命令。

总而言之,简单地说,如果我们想将localdb(微软数据库.mdf文件)移动到其他本地服务器(计算机,机器),我们只需要从计算机A的master数据库中分离localdb并复制文件并重新附加到计算机 B 的另一个主数据库。

希望这对其他人有帮助..