使用ObjectList时,通过SMO传输数据失败
本文关键字:传输 数据 失败 SMO 通过 ObjectList 使用 | 更新日期: 2023-09-27 18:25:54
我可以使用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"?
除xfr.CopyAllTables = false;
外,还必须设置:
xfr.CopyAllObjects = false;
默认情况下,它设置为true
,这就是出现错误的原因。如果省略这一行,则会得到您提到的null引用异常。
(验证您的代码并使用110''SDK''Assemblys)