如何在dtsx包中获取外部变量值

时间:2010-04-05 07:09:38

标签: sql-server ssis

我正在从c#执行.dtsx包,它正在执行正常,如果我从c#代码传递一个变量值,那我怎样才能在.dtsx包上获取我的ole db源查询。这是我的c#代码。

            string file = @"D:\CYNCZFuzzy\CYNCZFuzzy\Contact.dtsx";
           package = app.LoadPackage(file, null);
           Variables vars = package.Variables;
           vars["User::parentContactID"].Value = 1028203;
           pkgResults = package.Execute();
           string result = pkgResults.ToString();

我的ole db源查询需要1028203值,这是我的查询。

select  cr.MasterContactID as ParentContactID, 
        c.ID,C.FirstName, 
        C.MiddleName, 
        c.LastName, 
        c.ID as FieldID 
from    Contact c inner join 
        ContactRelation cr on cr.SlaveContactID = c.ID 
where   RelationshipID = 1 
AND     cr.MasterContactID = ?

我应该写什么?从c#page获得1028203值。

提前致谢...

2 个答案:

答案 0 :(得分:1)

您必须在执行SQL任务中map variables to parameters另请参阅Working with Parameters and Return Codes in the Execute SQL TaskOLEDB Source

不幸的是,文档确实在房子周围散布了一些东西,SSIS需要精神柔道。

答案 1 :(得分:0)

编辑OLE DB源组件 在您看到的第一个对话框中,Connection Manager应在左侧突出显示 右侧是第一个框中的连接管理器名称( OLE DB connectionManager:),第二个框中的SQL命令(数据访问模式:),第三个框中将包含您在上面的问题中提供的Sql文本( SQL命令文本:) 在SQL命令文本:框的右侧,将有四个按钮 该组中的顶部按钮名为参数... 。单击此按钮将弹出一个子对话框。此对话框中只有一个框标有映射:
在此框的参数标题下,应该有一个名为Parameter0的参数(这是根据查询中问号的数量和位置预先填充的,即查询中的第一个?创建参数0,第二个问号创建参数1 ,查询中的第n个问号会创建一个参数(n-1)。此框中的另一列标记为变量。
如果单击变量下面的文本框,您可以看到它变为下拉文本框。您可以将其删除并选择与您的变量“User :: parentContactID”匹配的条目,然后单击确定以关闭子对话框,再次单击确定以关闭OLE DB源编辑对话框。这将以您在原始问题中要求的方式添加参数。