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

  • 相关阅读:
    Docker & ASP.NET Core (3):发布镜像
    Docker & ASP.NET Core (2):定制Docker镜像
    Docker & ASP.NET Core (1):把代码连接到容器
    Redis五大数据类型的常用操作
    centos安装Redis
    SpringBoot进阶教程(五十一)Linux部署Quartz
    mybatis在xml文件中处理转义字符
    org.apache.ibatis.builder.IncompleteElementException: Could not find result map java.lang.Integer
    SpringBoot进阶教程(五十)集成RabbitMQ---MQ实战演练
    浅谈RabbitMQ Management
  • 原文地址:https://www.cnblogs.com/yangtongnet/p/1754756.html
Copyright © 2020-2023  润新知