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

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文件
继续托一个“脚本任务”到设计窗口中,编写脚本程序如下:

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运行时间,我这里是每天一次。
出处:http://www.cnblogs.com/yangtongnet/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述