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

c#SQL)在附加在另一台计算机(服务器)中创建的.mdf文件后,无法打开物理文件(MS localdb.mdf),c#,sql-server,backup,attachment,localdb,C#,Sql Server,Backup,Attachment,Localdb,我正在用Microsoft localdb(.mdf)开发Windows桌面应用程序(C#WPF),我希望我的软件用户在移动到其他地方(计算机)时可以携带localdb(.mdf)文件。localdb(.mdf)文件是在第一台计算机上创建的 为了测试我的应用程序,我将localdb文件从计算机A复制到计算机B,并成功地附加了以下代码 string attach_greendbnameQuery = string.Format(@"EXEC sp_attach_db @dbname = N'gre

我正在用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_所有者。(我始终使用KayLee PC\KayLee帐户启动(登录)Windows(O/S) 我尝试将所有角色检查为数据库角色,甚至是服务器角色,但失败了。 甚至,我试图通过下面的代码删除用户KayLee PC\KayLee,但异常消息显示为

“用户”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();
如果在Server Management Studio中单击数据库,则当前数据库状态不会更改为已单击的数据库,并且子树节点(如表、安全性等)不会显示消息“无法访问数据库”,即使单击其他数据库,当前数据库状态也会更改为已单击的数据库

另外,我试图通过下面的代码更改localdb(数据库)的所有者,但似乎执行失败,结果是“sa”为“-1”,尝试使用我始终登录到Windows O/S的“KayLee PC\KayLee”时,错误消息类似于“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(database file.mdf),SQL server将不再识别localdb数据库,并且我们无法为localdb运行backup命令

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

希望这对其他人有帮助