gpt4 book ai didi

c# - 使用 ObjectList 时通过 SMO 传输数据失败

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:53 26 4
gpt4 key购买 nike

通过使用选项 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,这就是您收到错误的原因。如果您省略此行,您将得到您提到的空引用异常。

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

关于c# - 使用 ObjectList 时通过 SMO 传输数据失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26259512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com