2017-02-23 176 views
0

我有一个localdatabase“office.mdf” 我希望我的应用程序能够导出数据库,然后再次导入 我试图做到这一点使用备份查询导入和导出数据MDF SQLSERVER

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

要修复登录错误,请使用'sp_change_users_login'。 http://stackoverflow.com/questions/15944123/sql-server-back-restore-login-failed –

+0

谢谢,但它没有工作 –

回答

1

在SQL Server中,登录存储在主数据库的实例级别,而用户存储在每个用户数据库中并映射到登录。

听起来好像您试图用来访问数据库的登录名在目标服务器上不存在,或者SID不匹配(通常可以通过sp_change_users_login更正)。

一种选择是使用CREATE LOGIN ... WITH SID,并在将要恢复此数据库的所有服务器上使用相同的SID。

+0

我想我在SID上搜索,以避免这个问题,非常感谢你 –

+0

做到这一点回答你的问题? –

+0

它是有用的,但不幸的是,它并没有因为主要问题是我想要导出和导入数据库之间的数据,谢谢 –