使用对象列表时,通过SMS传输数据失败

时间:2014-10-08 14:31:13

标签: c# sql-server-2008 smo

我可以使用CopyAllTables = true选项将所有数据从源数据库传输到目标数据库,而不是在ObjectList中提供列表。

            ServerConnection conn = new ServerConnection(sourceServer);
            conn.LoginSecure = true;
            Server srvSource = new Server(conn);
            Database dbSource = srvSource.Databases[sourceDB];

            Transfer xfr = new Transfer(dbSource);

            xfr.CopyAllTables = true;
            xfr.Options.WithDependencies = false;
            xfr.Options.ContinueScriptingOnError = false;
            xfr.DestinationDatabase = destDB;
            xfr.DestinationServer = destServer;
            xfr.Options.DriAllKeys = true;
            xfr.Options.DriForeignKeys = true;
            xfr.DestinationLoginSecure = true;

            xfr.CopySchema = false;
            xfr.CopyData = true;
            xfr.TransferData();

这样可以将所有数据复制到目标数据库。我需要从复制过程中排除一个表。我试过了

            ServerConnection conn = new ServerConnection(sourceServer);
            conn.LoginSecure = true;
            Server srvSource = new Server(conn);
            Database dbSource = srvSource.Databases[sourceDB];

            Transfer xfr = new Transfer(dbSource);

            xfr.CopyAllTables = false;
            xfr.Options.WithDependencies = false;
            xfr.Options.ContinueScriptingOnError = false;
            xfr.DestinationDatabase = destDB;
            xfr.DestinationServer = destServer;
            xfr.Options.DriAllKeys = true;
            xfr.Options.DriForeignKeys = true;
            xfr.DestinationLoginSecure = true;

             foreach (Table tb in dbSource.Tables)
            {
                if (tb.IsSystemObject == false && tb.Name != "ExcludedTable" )
                {
                    xfr.ObjectList.Add(tb);
                }
            }

            xfr.CopySchema = false;
            xfr.CopyData = true;
            xfr.TransferData();

当调用TransferData时,我得到一个异常" System.NullReferenceException"没有数据转移

{"Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."}
    [System.NullReferenceException]: {"Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."}
    Data: {System.Collections.ListDictionaryInternal}
    HelpLink: null
    HResult: -2147467261
    InnerException: null
    Message: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."
    Source: "Microsoft.SqlServer.SmoExtended"
    StackTrace: "   bei Microsoft.SqlServer.Management.Smo.Transfer.GetObjectList()\r\n   
    bei Microsoft.SqlServer.Management.Smo.Transfer.Microsoft.SqlServer.Management.Common.ITransferMetadataProvider.SaveMetadata()\r\n 
    bei Microsoft.SqlServer.Management.Dts.DtsTransferProvider.Configure(ITransferMetadataProvider metadataProvider)\r\n  
    bei Microsoft.SqlServer.Management.Smo.Transfer.GetTransferProvider()\r\n   
    bei Microsoft.SqlServer.Management.Smo.Transfer.TransferData()\r\n  

    TargetSite: {Microsoft.SqlServer.Management.Smo.DependencyCollection GetObjectList()}

如何排除" ExcludedTable"从出口?

1 个答案:

答案 0 :(得分:2)

xfr.CopyAllTables = false;除外,您还必须设置:

xfr.CopyAllObjects = false;

默认设置为true,这就是您收到错误的原因。 如果省略此行,则会得到您提到的空引用异常。

(验证您的代码并使用110 \ SDK \ Assemblies)