我可以使用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"从出口?
答案 0 :(得分:2)
xfr.CopyAllTables = false;
除外,您还必须设置:
xfr.CopyAllObjects = false;
默认设置为true
,这就是您收到错误的原因。
如果省略此行,则会得到您提到的空引用异常。
(验证您的代码并使用110 \ SDK \ Assemblies)