使用 SMO 对象将 SQL 数据库从服务器地址复制到本地主机

问题描述

我需要在 c# 中实现将某个数据库从服务器地址复制到本地主机的功能(我知道备份/恢复选项 - 当我想导出和导入本地存储的数据库时,我已经实现了) .我尝试了以下源代码,但是当我尝试运行 transferData 时,出现错误“未安装集成服务组件或您无权使用它。”。我使用的是 sql Express 2014。

            Server sourceServer = new Server(sourceServerName);
            Server destinationServer = new Server(destinationServerName);
            try
            {
                sourceServer.ConnectionContext.LoginSecure = true;
                sourceServer.ConnectionContext.Connect();

                destinationServer.ConnectionContext.LoginSecure = true;
                destinationServer.ConnectionContext.Connect();
               
                Microsoft.sqlServer.Management.Smo.Database databaseSource = sourceServer.Databases[databaseName];
                Microsoft.sqlServer.Management.Smo.Database databaseDestination = new Microsoft.sqlServer.Management.Smo.Database(destinationServer,databaseName);

                 databaseDestination.Create();

                Transfer transferDatabase = new Transfer(databaseSource)
                {
                    copyAllObjects = false,copyAllSchemas = true,//copy all user defined data types from source to destination
                    copyAllUserDefinedDataTypes = true,//copy all tables from source to destination
                    copyAllTables = true
                };

         
                //copy all constraints
                transferDatabase.Options.DriAllKeys = true;
                //copy all defaults
                transferDatabase.Options.DriDefaults = true;
                //Drops the existing tables
                transferDatabase.DropDestinationObjectsFirst = true;
                //copy data of all source tables to destination tables
                //It actually generates INSERT statement for destination
                transferDatabase.copyData = true;
                //copy all stored procedure from source to destination
                transferDatabase.copyAllStoredProcedures = true;
                //specify the destination server name
                transferDatabase.DestinationServer = destinationServer.Name;
                //specify the destination database name
                transferDatabase.DestinationDatabase = databaseDestination.Name;
                //TransferData method transfers the schema objects and data
                //whatever you have specified to destination database
                transferDatabase.TemporaryPackageDirectory = @"C:\Data\";
                transferDatabase.Options.ContinueScriptingOnError = true;
                transferDatabase.TransferData();
            }
            catch (Exception ex)
            {
                log.Error(ex.Message);
            }
            finally
            {
                if (sourceServer.ConnectionContext.IsOpen)
                {
                    sourceServer.ConnectionContext.disconnect();
                }

                if (destinationServer.ConnectionContext.IsOpen)
                {
                    destinationServer.ConnectionContext.disconnect();
                }
            }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)