Intergration Service(2005)备忘(之)数据传输处理

        如题,之所以写这篇随笔,是因为之前一直是学习AND使用的是SSIS 2008,对SSIS 2005的一些控制流工具使用细节上不是很熟悉(SSIS 2008和2005是有些区别的),写下这篇随笔来警示自己和博客园的诸位兄弟。

        OK,下面进入正题。

        需求:F:\Inbound目录里面每天会产生以GR_PRICECOMPARE+日期时间格式命名的TXT文件,要求将其中的数据导入到指定的数据库表中,并且每天会产生不定数量的这种文件。

        开发工具:VS2005/MS SQL2005

        使用技术:Microsoft Integration Services

        1、声明两个变量:

       

        iRead是循环变量,iCount是循环次数,这里的iCount取值是F:\Inbound目录下的txt文件的数量。

        2、给iCount赋值

        这里用的组建是“脚本任务”,首先在工具箱中托一个“脚本任务”的组建到设计界面,然后在上面右击编辑,出现下面画面:

       

        注意:在ReadWriteVariables右边放的是变量iCount,在2005中式这样写的,但是在2008变量的格式是User::iCount,如果是系统变量,则需要将User换成System,多个变量同样是用‘,’隔开。

         然后点击“设计脚本”开始编写脚本(注:2005中只能用VB.NET编写脚本,2008中可以用VB.NET和C#.NET编写脚本),下面是脚本编辑页面:

   

   这一步做的主要是找出F:\Inbound目录下以GR_PRICECOMPARE+日期时间格式命名的TXT文件的数量,代码如下:

ExpandedBlockStart.gif 代码
  Public   Sub  Main()
        
Dim  path  As   String
        
Dim  searchPattern  As   String
        
Dim  importFiles  As   String ()
        path  =   " F:\Inbound "
        searchPattern 
=   " GR_PRICECOMPARE*.txt "
        importFiles 
=  Directory.GetFiles(path, searchPattern)
        
If  importFiles.Length  =   0   Then
            Dts.Variables(
" iCount " ).Value  =   0
            Dts.TaskResult 
=  Dts.Results.Failure
            
Return
        
Else
            Dts.Variables(
" iCount " ).Value  =  importFiles.Length
            Dts.TaskResult 
=  Dts.Results.Success
        
End   If

    
End Sub

 

   3、For循环编辑器

         这一步首先在工具箱里面托一个For循环编辑器到设计界面上,For循环编辑器是一个非常简单好用的循环编辑器,下面看使用方法:

        

         右击编辑FOR循环容器:

          

           InitExpression是对循环中使用的变量进行初始化

           EvalExpression是要求指定一个表达式,当表达式结果为False时候,循环终止

           AssignExpression是指定执行一次循环之后,变量的值改变规则

           注意:这里的变量书写方式@iRead

           OK,For循环设定就是如此简单。

           4、备份TXT文件

            继续托一个“脚本任务”到设计窗口中,编写脚本程序如下:

ExpandedBlockStart.gif 代码
Public   Sub  Main()
        
Dim  path  As   String
        
Dim  newPath  As   String
        
Dim  searchPattern  As   String
        
Dim  importFiles  As   String ()
        
Dim  art  As   String ()
        
Dim  datestr  As   String   =   ""

        datestr 
=   Format (Now(),  " yyyy-MM " )
        newPath 
=   " F:\Backup\ "   +  datestr
        
If  System.IO.Directory.Exists(newPath)  =   False   Then
            System.IO.Directory.CreateDirectory(newPath)
        
End   If
        
' FTP 路径
        path  =   " F:\Inbound "
        searchPattern 
=   " GR_PRICECOMPARE*.txt "

        importFiles 
=  Directory.GetFiles(path, searchPattern)
        
' 找不到文件!
         If  importFiles.Length  =   0   Then
            Dts.TaskResult 
=  Dts.Results.Failure
            
Return
        
End   If
        
' 找到多个类似的文件
         If  importFiles.Length  >   0   Then
            art 
=  importFiles( 0 ).Split( CChar ( " \ " ))
            File.Copy(importFiles(
0 ), newPath  +   " \ "   +  art(art.Length  -   1 ),  True )
            File.Move(importFiles(
0 ), path  +   " \GR_PRICECOMPARE.txt " )
        
End   If
        Dts.TaskResult 
=  Dts.Results.Success
    
End Sub

 

            5、读取TXT文件中的数据

             新建一个平面文件链接如下:

            

             下面是在没有选择第一行是列名的情况下,列名是默认从"列1—列N"

            

              下面要从工具箱中托一个数据流组建到设计窗口界面:

              

                平面文件源的链接就选择我们刚建好的平面文件链接(GR_PRICECOMPARE

                下面再建一个与数据库链接的OLEDB链接,就OK了(这个比较简单,这里就不在敖述)

                然后我们右击OLEDB目标编辑,看看文本文件和数据库表各列的映射情况:

                

                6、删除GR_PRICECOMPARE.txt文件

                因为平面文件连接器是和这个文件链接的,而原文件名是GR_PRICECOMPARE+日期时间组成的,在循环第一步是先将该文件备份,然后将名称改成GR_PRICECOMPARE.txt,这样也是为了平面文件链接器方便链接,最后一步当然是删除GR_PRICECOMPARE.txt,然后进入下一次循环,将下一个原文件名称转换成GR_PRICECOMPARE.txt,直到原始文件读取完为止。

                 7、安装部署

                 将开发完的包安装部署到SQL 2005上面就OK了,然后设定job运行时间,我这里是每天一次。

转载于:https://www.cnblogs.com/yangtongnet/archive/2010/06/09/1754756.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值