zoukankan      html  css  js  c++  java
  • 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运行时间,我这里是每天一次。

  • 相关阅读:
    图片上传-下载-删除等图片管理的若干经验总结3-单一业务场景的完整解决方案
    图片上传-下载-删除等图片管理的若干经验总结2
    HDU 1195 Open the Lock
    HDU 1690 Bus System
    HDU 2647 Reward
    HDU 2680 Choose the best route
    HDU 1596 find the safest road
    POJ 1904 King's Quest
    CDOJ 889 Battle for Silver
    CDOJ 888 Absurdistan Roads
  • 原文地址:https://www.cnblogs.com/yangtongnet/p/1754756.html
Copyright © 2011-2022 走看看