gpt4 book ai didi

object - SSIS 传递自定义对象

转载 作者:行者123 更新时间:2023-12-02 02:23:10 27 4
gpt4 key购买 nike

我在我的一个流程任务中创建了一个自定义类,并为其属性分配了值。我将这些自定义类的集合存储在 Object 变量中稍后在另一个脚本任务中,我想从这个自定义对象集合中读取值。

自定义类在其他 ssis 组件中是未知的。我无法创建 dll 并将其存储在 SQL 服务器上,因此如何传输自定义对象的集合。

我可以让它们进入脚本任务,它们具有所有属性和正确的值,但似乎没有办法访问这些属性。我复制了自定义类并尝试对其进行强制转换,但 SSIS 知道它不是同一个类,因此无法正常工作。

我如何访问这些数据?

埃里克

最佳答案

如果事实上您无法创建自定义 DLL 或自定义 SSIS 组件,那么您唯一的选择就是使用 .NET reflection在您的消费脚本中查找适当的方法/属性并动态访问它们。

这将是一项大量的工作,而 SSIS 提供的编程环境并不真正有利于它。如果您确实无法将非包代码部署到您的服务器,我会认真重新考虑需要该自定义类的架构。

编辑:简单的访问并不像我想象的那么困难。假设您有一个名为“SomeObject”的 Object 类型的包级变量,您可以构建如下控制流: demonstration control flow for passing object variables

SCR_SetVariables 的代码是:

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;

namespace ST_00e1230a50e6470e8324a14e9d36f6c7.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
#region VSTA generated code
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
class SomeClass
{
public string Greeting { get; set; }
public override string ToString()
{
return String.Format("My greeting is {0}", this.Greeting);
}
}
public void Main()
{
SomeClass myClass = new SomeClass();
myClass.Greeting = "Hello, world!";
Dts.Variables["SomeObject"].Value = myClass;
Dts.TaskResult = (int)ScriptResults.Success;
}
}
}

SCR_ShowVariables 的代码是:

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Reflection;

namespace ST_eea68a39bda44e9d9afaa07d2e48fc0f.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
#region VSTA generated code
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
public void Main()
{
object someObject = Dts.Variables["SomeObject"].Value;
PropertyInfo getGreeting = someObject.GetType().GetProperty("Greeting");
string greeting = (string)getGreeting.GetValue(someObject, null);
string msg = String.Format("someObject.Greeting = '{0}'", greeting);
System.Windows.Forms.MessageBox.Show(msg);
Dts.TaskResult = (int)ScriptResults.Success;
}
}
}

这将显示以下消息框:

resulting messagebox displaying "Hello, world!"

关于object - SSIS 传递自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19698626/

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