2014-10-08 38 views
2

当无法我可以通过使用选项CopyAllTables =真,而不是提供在链表类列表从源DB的所有数据传输到目标DB。通过SMO Transfering数据使用链表类

  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”从出口?

+0

很难看到有什么异常的话,它是在德国,它不涉及任何线在你的代码中的异常从哪里来。任何机会,你可以用英语获得这种例外,并在适当的情况下表明例外发生在哪里? – 2014-10-10 19:43:15

+0

@TT它不是设置为object.'您可以在http://www.finderr.net翻译的实例只是'对象引用。 – 2014-10-10 19:55:36

+0

尝试设置也'xfr.CopyAllObjects = FALSE;' – 2014-10-10 20:05:03

回答

2

除了xfr.CopyAllTables = false;还必须设置:

xfr.CopyAllObjects = false; 

它默认设置为true,这是为你的错误的原因。 如果你省略这一行,你会得到你所提到的空引用异常。

(验证你的代码,并与110个\ SDK \装配工作)

+0

设置CopyAllObjects =虚假的伎俩。 – 2014-10-13 11:11:23