读取CSV文件到数据库程序_技术总结

以下是我这几天做读取CSV文件winform的技术小总结

1.首先是CSV文件的读取

利用C#中的streamreader 类
1.首先利用CSV文件的绝对路径初始化streamreader类,
2.然后利用该类的一行一行的ReadLine方法读取CSV文件中的数据
3.利用while循环判断该类的PeeK方法的返回值是否为-1(判断下一行数据是否可读取),以确定循环结束条件
4.在循环中将读取到的字符串按照分隔符分隔为字符串数组
5.根据字符串数组的长度在新建的datatable中添加相应的列,列名为第一行数据的内容(CSV文件第一行数据为列名)
6.向datatable中添加数据:新建datarow 根据字符串数组长度依次向datarow中赋值,然后在datatable中添加该赋值的datarow
7.读取结束后关闭streamreader类实例
8.至此已经将CSV文件中的数据读到一个datatable中了

2.数据存入数据库

主要是利用C#中的sqlBulkCopy类

1.首先是利用一个sqlconnection类实例实例化sqlBulkcopy(此处确定复制的目标数据库)
2.设置目标表:利用sqlBulkCopy中的DestinationTableName属性
3.绑定:数据源列和目标表列:利用sqlBulkCopy的ColumnMapping方法中的Add方法绑定所有的列:
eg: iSqlBulkCopy.ColumnMappings.Add("Vs", "Vs");//前面的是数据源的列名,后面是目标表的列名
iSqlBulkCopy.ColumnMappings.Add("PHs", "PHs");
iSqlBulkCopy.ColumnMappings.Add("PRs", "PRs");
iSqlBulkCopy.ColumnMappings.Add("PMs", "PMs");
4.绑定完所有的列后,打开数据库连接:利用实例化参数sqlconnection的open方法
5.执行数据复制操作:利用SQLBulkCopy类中的writeToServer方法,参数为数据表datatable:
eg: iSqlBulkCopy.WriteToServer(iDataTable);//复制数据
6.至此数据复制完成

3.扫瞄指定文件夹下的CSV文件

利用C#中的DirectoryInfo类
1.首先是实例化该类,实例化参数为指定的路径
2.利用DirectoryInfo类中的Exists 方法判断参数目录是否存在
3.若存在则将DirectoryInfo类传递给一个新从DirectoryInfo类(???);不存在则退出
4.利用DirectoryInfo类中的GetFileSystemInfos()方法获取指定目录下所有的文件的集合为一个FileSystemInfo的数组
5.利用foreach遍历FileSystemInfo数组中的所有的FileSystemInfo对象
6.在遍历循环中判断FileSystemInfo的Name属性的最后四个字符是否为“.CSV”(过滤出CSV文件)
7.至此达到扫瞄出指定目录下所有CSV文件的目的
——若为CSV文件,首先调用读取CSV文件数据函数读取数据,然后存储数据,然后开始移动文件--


4.文件移动

利用FileInfo类
1.首先实例化FileInfo类,实例化参数为要移动的文件的绝对路径(包含文件名)
2.执行FileInfo类中的MoveTo方法,方法参数为移动新位置的绝对路径(包含文件名)
3.文件移动完成

5.Log文件(TXT)新建以及信息追加

主要利用FileStream类和StreamWriter类
1.首先利用静态类File的Exists方法判断要新建的文件是否存在
2.若不存在,则利用绝对路径(含新建文件的名称)实例化FileStream类
3.利用FileStream的Close方法关闭FileStream
4.至此实现文件的新建
5.信息追加:首先实例化StreamWriterLei 实例化参数为,要写入文件的绝对路径(含文件名),是否在文件不存在是创建该文件;
6.利用StreamWriter的WriteLine方法向文件中追加一行数据,参数为要追加的string内容
7.利用StreamWriter的Flush方法清除编写器缓冲区数据,并使缓冲区数据写入基础流
8.关闭StreamWriter
9.至此信息追加完成。


6.定时器功能

主要是利用Syste中的Timers中的Timer类

1.首先实例化私有的Timer类,无参数
2.设定定时器触发时间间隔即定时间隔:利用Timer类中的Interval属性
3.设置定时器为每次定时间隔结束发生:利用Timer类中的AutoReset属性
4.订阅定时发生事件:
eg:itimer.Elapsed += new ElapsedEventHandler(TimerElapsed);
5.启动定时器:start()方法
6.订阅事件中的(TimerElapsed)方法为每次定时结束执行的函数参数签名为void (object,ElapsedEventArgs)Function
7.(TimerElapsed)中首先停止定时器:stop()方法(目的是为了精确定时,让定时间隔不计算程序运行时间)
8.执行定时操作
9.开始定时器:start();
10.至此定时器功能完成。

 

转载于:https://www.cnblogs.com/forevertime/p/4538528.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值