根据以下参考文档,我希望移动一个SQL Server Express数据库(在vs2013中创建localdb)。
How to move a localdb from one machine to another manually
但是,操作需要在我的wpf c#应用程序中完全自动化。
我想要实现的是(更新):
初始应用程序实施(目前最重要的) - >
安装应用程序时,需要将数据库安装/复制到用户计算机,理想情况下,数据库需要打包在zip或安装程序文件中,以便在安装应用程序时可以轻松地将其传输到用户计算机,或者我对任何更好的想法持开放态度?
保持最新状态 - >应用程序需要能够将localdb中的数据导出并导入到本地网络共享上的sql数据库文件中。这可能需要合并数据。
是否通过c#代码或sql脚本完成(如果脚本请告知如何从c#运行脚本)一个最好怎么能实现这个目标?
提前感谢您的帮助!
答案 0 :(得分:1)
基于你的问题,你试图简单地将数据库从一台机器转移到另一台机器上吗?您需要考虑一些变量,例如,您是否需要创建数据库?应用程序如何与每台机器对话?还需要考虑其他几个变量;然而,我很可能采取的路线是创建一个理想的网络服务。
Web服务允许您决定是将本地数据库拉到服务器,还是将服务器拉到本地计算机,或者是否需要任何要求。
如果没有这些要求,任务就变得困难。但是,如果你在较小的范围内考虑你的问题,那就很清楚了。
这基本上就是你需要完成的所有事情,一个班级就可以做到。
您需要为此调用的方法创建逻辑;但是想在同一台机器上做你的要求;这与您的要求没有什么不同。
if(IsDatabaseInExistence(server.TemplateName) == true)
CreateSQLDatabase(customer.WebAddress);
if(IsDatabaseInExistence(customer.WebAddress) == true)
RestoreSQLDatabase(server.TemplateName, customer.WebAddress);
一种获取参数的方法,然后调用几个私有方法,您就完成了任务。在您完成任务时,尝试使用parameters
,如果您发出原始SqlCommand
,则可以使其易受 SQL注入的攻击。</ p>
糟糕的做法:
using(SqlConnection connectionForSQL = new SqlConnection(@"Server=localhost; Integrated Security=SSPI; Database=master"))
{
string restoreSQLDb =
"RESTORE FILELISTONLY FROM DISK='C:\\Program Files\\Microsoft SQL Server\\MSSQL11.MSSQLSERVER\\MSSQL\\Backup\\" + templateName + ".bak'"
+ "RESTORE DATABASE [" + webAddress + "] FROM DISK='C:\\Program Files\\Microsoft SQL Server\\MSSQL11.MSSQLSERVER\\MSSQL\\Backup\\" + templateName + ".bak'"
+ "WITH "
+ "MOVE 'Parent' TO 'C:\\Program Files\\Microsoft SQL Server\\MSSQL11.MSSQLSERVER\\MSSQL\\DATA\\" + webAddress + ".mdf',"
+ "MOVE 'Parent_log' TO 'C:\\Program Files\\Microsoft SQL Server\\MSSQL11.MSSQLSERVER\\MSSQL\\DATA\\" + webAddress + "_log.ldf',"
+ "REPLACE";
using(SqlCommand restoreDbCommand = new SqlCommand(restoreSQLDb, connectionForSQL))
{
connectionForSQL.Open();
restoreDbCommand.ExecuteNonQuery();
}
}
此外,我忘记发布备份方法的示例,但您明白了。
但是我认为你的问题是从一台机器到另一台机器。我会研究 Windows Communication Foundation Services(WCF)。这应该提供与另一台机器通信的灵活性,并完成各种任务。
不幸的是,我没有确切的要求,所以它真的很难帮助你。
希望这会指出你正确的方向。