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文件的数量,代码如下:

代码
  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文件

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

代码
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运行时间,我这里是每天一次。

posted @ 2010-06-09 14:54  弗雷德瑞克杨  阅读(1300)  评论(1编辑  收藏  举报