65.9K
CodeProject 正在变化。 阅读更多。
Home

使用ASP.Net执行SSIS包(DTSX)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (23投票s)

2008 年 7 月 25 日

CPOL

3分钟阅读

viewsIcon

276417

downloadIcon

6676

本文演示了创建SSIS包并使用ASP.Net执行该包的步骤。

引言

我接到一个任务,要开发一个执行SQL Server 2005 SSIS包的网页。由于我对SSIS了解不多,一开始很难找到解决方案。但通过在线帮助,我最终解决了这个问题。我创建了一个简单的DTSX包,它将电子表格数据导入数据库表,然后我执行包内的存储过程来对数据库表进行操作。所有这些过程都通过asp.net执行。下面我将演示实现这一目标的步骤。

创建SSIS包

先决条件

1)数据库表

CREATE TABLE [dbo].[tblBusiness](
	[Business_ID] [numeric](18, 0) NULL,
	[Business_Name] [nvarchar](50) NULL
) ON [PRIMARY]

2)Excel数据:BusinessTemplate.xls

SSIS包工作流设计

  • 调用SQL任务
  • 用于删除tblBusiness数据。
  • 将Excel数据加载到数据库表tblBusiness。
  • 调用SQL任务来更新数据库表tblBusiness。
  • 步骤 1:将Excel数据加载到数据库表tblBusiness。

    1.在“项目”菜单下单击“SSIS导入导出向导”。

    2.单击“下一步”按钮。

    3.选择源并单击下一步。

    在我们的例子中,源是Excel。当通过.net代码分配时,指定的路径将被覆盖。

    例如:package.Connections["SourceConnectionExcel"].ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;data source=" + tbFileName.Text + ";Extended Properties=Excel 8.0; ";

    3.选择目标并单击下一步。

    4.选择“从一个或多个表复制数据”并单击下一步。

    5.出现“完成向导”屏幕,单击“完成”。

    完成上述步骤后,可以看到以下视图:

    在“控制流”选项卡下

    在“数据流”选项卡下

    注意:在“连接管理器”中会出现两个连接对象:

  • Excel连接对象:SourceConnectionExcel
  • SQL Server:DestinationConnectionOLEDB
  • 双击每个对象以验证连接字符串并重新保存。

    仅测试数据流是否正确构建。如果变成绿色,则数据流已成功执行。如果变成红色,则连接字符串有问题。

    步骤 2:创建SQL任务脚本以删除数据库表。

    1.创建全局包级别的变量。这些变量是包的输入参数。因此,拥有SQL存储过程的包可以消耗这些输入参数。

    2)在“控制流”选项卡下双击“准备SQL任务”。

    我们使用了“EXEC DeleteBusinessEntry ?” 这个过程将接收输入参数 @Business_ID。

    创建存储过程

    CREATE PROCEDURE DeleteBusinessEntry 
    	@Business_ID bigint	
    AS
    BEGIN
    	Delete from tblBusiness where Business_ID=@Business_ID
    END
    

    3)单击“参数映射”,以便将全局用户定义的输入变量映射到存储过程的输入变量。它是区分大小写的。还要注意数据类型及其大小。每个变量在其中都应有不同的ParameterName。

    步骤 2:创建SQL任务脚本以更新已加载Excel数据的数据库表内容。

    从工具箱将“执行SQL任务”拖放到控制流屏幕上。将“准备SQL任务”连接到数据流任务。也将数据流任务连接到SQL脚本任务对象。

    2)在“控制流”选项卡下双击“执行SQL任务”。

    我们使用了“EXEC UpdateBusinessEntry ?,?” 这个过程将接收两个输入参数 @Business_ID / @Business_Name。

    创建存储过程

    CREATE PROCEDURE UpdateBusinessEntry 
    	@Business_ID bigint	,
    	@Business_Name varchar(100)	
    AS
    BEGIN
    	Update  tblBusiness 
    	Set Business_Name=@Business_Name
    	where Business_ID=@Business_ID
    END
    
    

    3)单击“参数映射”,以便将全局用户定义的输入变量映射到存储过程的输入变量。它是区分大小写的。还要注意数据类型及其大小。每个变量在其中都应有不同的ParameterName。

    完成以上三个步骤后,运行包。

    使用ASP.Net执行SSIS包

    重要引用:Microsoft.SqlServer.ManagedDTS

    下面的代码片段是自解释的。

           using Microsoft.SqlServer.Dts.Runtime;
            
           protected void btnExecute_Click(object sender, EventArgs e)
           {
                Application app = new Application();
                Package package = null;
                try
                {
                string fileName = 
    Server.MapPath(System.IO.Path.GetFileName(FileUpload1.PostedFile.FileName.ToString()));
                FileUpload1.PostedFile.SaveAs(fileName);
                
                //Load DTSX
                package = 
    app.LoadPackage(@"D:\SSIS_ASP_NET\SSIS_ASP_NET_DEMO\SSIS_ASP_NET_DEMO\Package1.dtsx", null);
                
                //Global Package Variable
                Variables vars = package.Variables;
                vars["Business_ID"].Value = txtBusinessID.Text;
                vars["Business_Name"].Value = txtBusinessName.Text;
                
                //Specify Excel Connection From DTSX Connection Manager
                package.Connections["SourceConnectionExcel"].ConnectionString =
     "provider=Microsoft.Jet.OLEDB.4.0;data source=" + fileName + ";Extended Properties=Excel 8.0; ";
                
                //Execute DTSX.
                Microsoft.SqlServer.Dts.Runtime.DTSExecResult results = package.Execute();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                package.Dispose();
                package = null;
            }
        }
    
            

    以上代码中重要的因素是将Excel文件的源分配给SSIS包,例如package.Connections["SourceConnectionExcel"].ConnectionString

    HTML设计

    <html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; >
    <head runat=&quot;server&quot;>
        <title>Execute SSIS</title>
    </head>
    <body>
        <form id=&quot;form1&quot; runat=&quot;server&quot;>
        <div>
             <div style=&quot;text-align: left&quot;>
                <table>
                       <tr>
                        <td style=&quot;height: 26px&quot; colspan=&quot;2&quot;>
                       <h2>Execute SSIS Package</h2>     </td>
                    </tr>
                    <tr>
                        <td style=&quot;width: 100px; height: 26px&quot;>
                            <strong>
        
            Business ID</strong></td>
                        <td style=&quot;width: 100px; height: 26px&quot;>
                            <asp:TextBox ID=&quot;txtBusinessID&quot; runat=&quot;server&quot;></asp:TextBox></td>
                    </tr>
                    <tr>
                        <td style=&quot;width: 100px&quot;>
                            <strong>BusinessName</strong></td>
                        <td style=&quot;width: 100px&quot;>
                            <asp:TextBox ID=&quot;txtBusinessName&quot; runat=&quot;server&quot;></asp:TextBox></td>
                    </tr>
                       <tr>
                        <td style=&quot;width: 100px&quot;>
                            <strong>Upload Excel</strong></td>
                        <td style=&quot;width: 100px&quot;>
        
            <asp:FileUpload ID=&quot;FileUpload1&quot; runat=&quot;server&quot; /></td>
                    </tr>   <tr>
                        <td style=&quot;width: 100px&quot;>
            </td>
                        <td style=&quot;width: 100px&quot;>
            <asp:Button ID=&quot;btnExecute&quot; runat=&quot;server&quot; Text=&quot;Execute SSIS&quot; OnClick=&quot;btnExecute_Click&quot; /></td>
                    </tr>
                </table>
            </div>
        
            <br />
              <br />
             <br />
            <br />
            </div>
        </form>
    </body>
    </html>
    

    参考

    在将此实现到开发中之前,请参阅本文。本文描述了生产部署的先决条件。https://codeproject.org.cn/KB/aspnet/Deployment_SSIS_NET.aspx

    结论

    希望本文能达到目的。欢迎提出任何建议或更正。

    © . All rights reserved.