从FTP下载文件后把数据放在数据库里.
2009-12-04 16:03
232 查看
相关需求是:
1.从FTP上下载文件(此FTP不知因为什么原因.下载东东时二次连接才会连上一次.FTP软件是,在.NET程序下一样如此).
2.下载文件时先要看这个文件的控制文件在不在,在才下载,不在不下载.
3.解析文件每行数据.客户会给出这个字段在这行数据中的位置.如Name(0,8),Status(8,5),T1(13,7),T2(20,30),T3(50,50).......
4.因相关要求.可以要加上一些数据库字段,字段名固定.Updatename表示文件批次.可能有的文件需要一个Ldata字段表示插入时间.
5.把数据解析后放在相应的数据表.
6.删除原文件和相关控件文件.
7.Mail报告当前情况
很简单的一个需求.开始只有二份文件,我想那好,我就用SSIS好了.也做好了.
但是后有六份文件,可能不至,吐血的是,都是上面的要求.只是在第三步会不同,字段名不同,位置不同........用SSIS我就要做六份差不多的.
然后一个有问题.可能另个五个就有相同的问题.可能就要改六次.
算了.我还是用我比较擅长的C#写吧.用什么模式也要对六个文件来生成对应的情况.还是用LinqToSQL生成的类.再加上反射与泛形解决吧.(^_^说的有的大,就是些相关小应用).
首先分析三,如Name(0,8),Status(8,5),T1(13,7),T2(20,30),T3(50,50).......
数据行分割是有规则的.就是一个接一个的分割,那么(这就要求数据库字段要和文件顺序一样,并且长度要正确.).先看一下LinqToSql为我们生成的类吧.
代码
BomDataDataContext db = new BomDataDataContext();
FtpClass ftp = new FtpClass("----------", "-----------", "---------", null);
//关于A51Bom的处理
FtpFile file1 = new FtpFile { Name = "----------", Path = "test/----", ControlFileName = "----_ENDFILE", SavePath = @"-----------" };
//取得数据
List<A51BOM> datas1 = ftp.DownData<A51BOM>(file1);
//入数据库
if (datas1 != null)
{
db.A51BOM.InsertAllOnSubmit(datas1);
Insert_Message(file1.Name,datas1.Count);
}
总的来说,是取了个巧,其实一样有六个类,只是因为那六个类是用LinqToSql上直接拉表就行了.其中表要建好是关建.
不过总的来说,能很好解决相关问题.比如修改文件出错的异常,在SSIS上,我可能要修改六次(可能SSIS也能做到.不过我现在做不到).而用我上面程序,只要修改一个地方.那六份文件便都能应用到.
至于其中说用到了反射会不会有性能问题.就我调试而言.反射部分我是感觉不到任何执行时间长的.时间长的只有从FTP下载文件时才会有感觉.一份6000行的文件.把每行全用上面方法转换为对象时就我调试时而言我都感觉要不到1S,更不要说发布后.至于前面分析类的属性.我放在静态函数里了这样声明N个对象时都只有一份对应地址.保证多个对象不会重复构造这一部分.像单例模式那样.
1.从FTP上下载文件(此FTP不知因为什么原因.下载东东时二次连接才会连上一次.FTP软件是,在.NET程序下一样如此).
2.下载文件时先要看这个文件的控制文件在不在,在才下载,不在不下载.
3.解析文件每行数据.客户会给出这个字段在这行数据中的位置.如Name(0,8),Status(8,5),T1(13,7),T2(20,30),T3(50,50).......
4.因相关要求.可以要加上一些数据库字段,字段名固定.Updatename表示文件批次.可能有的文件需要一个Ldata字段表示插入时间.
5.把数据解析后放在相应的数据表.
6.删除原文件和相关控件文件.
7.Mail报告当前情况
很简单的一个需求.开始只有二份文件,我想那好,我就用SSIS好了.也做好了.
但是后有六份文件,可能不至,吐血的是,都是上面的要求.只是在第三步会不同,字段名不同,位置不同........用SSIS我就要做六份差不多的.
然后一个有问题.可能另个五个就有相同的问题.可能就要改六次.
算了.我还是用我比较擅长的C#写吧.用什么模式也要对六个文件来生成对应的情况.还是用LinqToSQL生成的类.再加上反射与泛形解决吧.(^_^说的有的大,就是些相关小应用).
首先分析三,如Name(0,8),Status(8,5),T1(13,7),T2(20,30),T3(50,50).......
数据行分割是有规则的.就是一个接一个的分割,那么(这就要求数据库字段要和文件顺序一样,并且长度要正确.).先看一下LinqToSql为我们生成的类吧.
代码
BomDataDataContext db = new BomDataDataContext();
FtpClass ftp = new FtpClass("----------", "-----------", "---------", null);
//关于A51Bom的处理
FtpFile file1 = new FtpFile { Name = "----------", Path = "test/----", ControlFileName = "----_ENDFILE", SavePath = @"-----------" };
//取得数据
List<A51BOM> datas1 = ftp.DownData<A51BOM>(file1);
//入数据库
if (datas1 != null)
{
db.A51BOM.InsertAllOnSubmit(datas1);
Insert_Message(file1.Name,datas1.Count);
}
总的来说,是取了个巧,其实一样有六个类,只是因为那六个类是用LinqToSql上直接拉表就行了.其中表要建好是关建.
不过总的来说,能很好解决相关问题.比如修改文件出错的异常,在SSIS上,我可能要修改六次(可能SSIS也能做到.不过我现在做不到).而用我上面程序,只要修改一个地方.那六份文件便都能应用到.
至于其中说用到了反射会不会有性能问题.就我调试而言.反射部分我是感觉不到任何执行时间长的.时间长的只有从FTP下载文件时才会有感觉.一份6000行的文件.把每行全用上面方法转换为对象时就我调试时而言我都感觉要不到1S,更不要说发布后.至于前面分析类的属性.我放在静态函数里了这样声明N个对象时都只有一份对应地址.保证多个对象不会重复构造这一部分.像单例模式那样.
相关文章推荐
- SpringMVC 实现POI读取Excle文件中数据导入数据库(上传)、导出数据库中数据到Excle文件中(下载)
- C# 利用FTP自动下载xml文件后利用 FileSystemWatcher 监控目录下文件变化并自动更新数据库
- 【Java】数据库查询的数据直接以指定文件类型下载到本地(弹出下载框)
- 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)
- 将数据库中数据下载到csv格式文件中
- 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)
- mini学生管理系统。。。全部代码,4个java文件放在同一个包下面即可。用JDBC调用数据库取出数据。
- window下备份数据库到LinuxFTP服务器上并自动删除7天前数据备份文件
- 定时从ftp上下载txt文件到数据库中
- 点击按钮往word文件中固定地方添加数据库数据再下载
- C# 利用FTP自动下载xml文件后利用 FileSystemWatcher 监控目录下文件变化并自动更新数据库
- springMvc 中 Excel批量数据上传,利用POI解析数据保存入数据库 及模板文件下载
- 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)
- 通过FTP将一个数据文件从A服务器下载到B服务器的整个过程
- 一切尽在自动中(二),sqlserver “利用FTP下载然后bcp方式导入数据到数据库”
- 把数据库中所有的数据复制到一个文件中,值之间放置“,”,每一行数据都另起一行,并且把所有的值都放在“"”之间
- 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】) 转
- VC2010 ADO 写入二进制数据到数据库 下载二进制数据到文件
- Java导出页面数据或数据库数据至Excel文件并下载,采用JXL技术,小demo(servlet实现)
- 关于tp3.2.3文件导入数据库(去除重复数据)、写日志和下载问题