我有一个本地数据库" office.mdf" 我希望我的应用程序能够导出数据库并再次导入它 我尝试使用备份查询
来实现DB.ExecuteNonQuery(@"BACKUP DATABASE [" + Directory.GetCurrentDirectory() + @"\office.mdf] TO DISK = N'" + distination + "'");
并恢复查询
DB.ExecuteNonQuery(@"USE [master]; RESTORE DATABASE [" + Directory.GetCurrentDirectory() + @"\office.mdf] " +
@"FROM DISK = N'" + source + "' WITH FILE = 1 , NOUNLOAD, REPLACE, STATS = 10 , NORECOVERY , " +
@" MOVE 'office_log' TO '" + Directory.GetCurrentDirectory() + @"\office_log.ldf'" +
@" MOVE 'office' TO '" + Directory.GetCurrentDirectory() + @"\office.mdf'");
我构建我的项目,然后在另一台设备上运行它,然后我导出数据库,我成功导入了数据库,但之后我再也无法连接到数据库了,我得到的信息是
Login failed for user "myuser"
所以首先我该如何解决这个问题 之后,导出数据库并从其他设备导回数据库的最佳方法是什么 如何将现有数据库与导出时合并(因此我不会丢失现有数据)
答案 0 :(得分:1)
在SQL Server中,登录存储在主数据库的实例级别,而用户存储在每个用户数据库中并映射到登录。
听起来您尝试用来访问数据库的Login在目标服务器上不存在或者SID不匹配(通常会使用sp_change_users_login进行更正)。
一种选择是使用CREATE LOGIN ... WITH SID,并在要恢复此数据库的所有服务器上使用相同的SID。