Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在代码中复制SQL Server数据库_C#_Sql Server - Fatal编程技术网

C# 在代码中复制SQL Server数据库

C# 在代码中复制SQL Server数据库,c#,sql-server,C#,Sql Server,我有两个SQL Server连接字符串,CX和CY 我需要做的是 确保CY中没有表 备份数据库CX 把它恢复到CY 还没有找到我要找的东西。我不想让工具来做这件事,我需要在运行时用C#代码来做,因为添加新客户机的操作需要将主数据库复制到空数据库。我不能使用预先制作的脚本,因为我还需要复制数据,并且主数据库可以在添加新客户机之前几秒钟更新 ==更新=== 我正在使用Smo.Backup和Smo.Restore。当我尝试恢复时,我得到: 错误3154备份集保存现有数据库以外的数据库的备份 有人能告诉

我有两个SQL Server连接字符串,CX和CY

我需要做的是

  • 确保CY中没有表
  • 备份数据库CX
  • 把它恢复到CY
  • 还没有找到我要找的东西。我不想让工具来做这件事,我需要在运行时用C#代码来做,因为添加新客户机的操作需要将主数据库复制到空数据库。我不能使用预先制作的脚本,因为我还需要复制数据,并且主数据库可以在添加新客户机之前几秒钟更新

    ==更新===

    我正在使用Smo.Backup和Smo.Restore。当我尝试恢复时,我得到:

    错误3154备份集保存现有数据库以外的数据库的备份

    有人能告诉我怎么避开这个吗?除此之外,我还有一个有效的解决方案

    谢谢


    Pete

    我理解您希望在C代码中实现这一点,但我真的认为调用命令行工具为您实现这一点是最简单的


    也就是说,它有一个脚本,看起来它可以做你想要的。您可以将其打包成一个存储过程,并很容易地调用它。

    我认为您需要查看

    SqlServer.Management.Smo.Backup  class
    

    另请参见,这可能是一个参考,具体取决于您的具体需要。

    您可以使用SQL Server管理对象(SMO)。退房有关备份数据库的详细信息,请访问。

    带有数据库备份的解决方案:

    1) 确保没有桌子

    select COUNT(*) from sys.sysobjects where xtype = 'U'
    
    2) 备份

    3) 恢复


    有关更多详细信息,请参阅SQL联机丛书:

    我正在尝试这种方法,但无法将备份恢复到新的数据库。有什么想法吗?(查看更新的问题文本)。显示的错误消息似乎表明[SqlServer.Management.Smo.]还原对象的ReplaceDatabase属性未设置为True;CY与备份中定义的数据库不匹配,因此SQL通过显式设置ReplaceDatabase on发送此消息(更好的方式是…可能键入了dbname),告诉SQL覆盖现有db是可以的。顺便说一句,我假设这是在“fancier”实用程序的上下文中,该实用程序将自动执行此备份过程(使用进度条、更具体的错误处理等)为了更简单的方法,T-SQL公开了许多备份/恢复功能,如Arthur的回答所示。您可以通过ADO或其他方式调用此类TSQL语句,避免处理SMO的对象模型。您好,Pete,请访问您的更新(了解到您可能在一个多月前解决了这个问题:)-您是否将“Restore.ReplaceDatabase”属性设置为True?
    BACKUP DATABASE MyFirstDatabase TO DISK= @path WITH FORMAT
    
    RESTORE DATABASE MySecondDatabase   FROM DISK = @path WITH REPLACE