2014-10-08 51 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