应用.NET控制台应用程序开发批量导入程序。
2017-03-05 18:20
330 查看
一.最近一直在调整去年以及维护去年开发的项目,好久没有在进行个人的博客了。每天抽了一定的时间在研究一些开源的框架,Drapper 以及NHibernate以及当前比较流行的SqlSuper框架 并进行对比当前的EF框架。各有优缺点。不多说了。
二.介绍一下批量导入程序的开发。
1.首先找到EXEL的文件的路径进行读取。
2.应用FileInfo进行读取,读取结束EXEL后将EXEL文件进行移动到其他的文件夹里面保存起来。
3.将FileInfo类用于典型的操作,如复制、移动、重命名、创建、打开、删除和追加到文件。
将FileInfo类用于典型的操作,如复制、移动、重命名、创建、打开、删除和追加到文件。
4.许多FileInfo方法在您创建或打开文件时返回其他 I/O 类型。可以使用这些其他类型进一步操作文件。有关更多信息,请参见特定的FileInfo成员,如Open、OpenRead、OpenText、CreateText或Create。
如果打算多次重用某个对象,可考虑使用 FileInfo的实例方法,而不是File类的相应静态方法,因为并不总是需要安全检查。
默认情况下,将向所有用户授予对新文件的完全读/写访问权限。
下表描述了用于自定义各种 FileInfo 方法的行为的枚举。
5.然后进行逐行读取变可以了。然后我应用的是原始的EF 进行添加的插入数据的效率不高,但是这个一个非常简单的一个程序。
代码如下:
二.介绍一下批量导入程序的开发。
1.首先找到EXEL的文件的路径进行读取。
2.应用FileInfo进行读取,读取结束EXEL后将EXEL文件进行移动到其他的文件夹里面保存起来。
3.将FileInfo类用于典型的操作,如复制、移动、重命名、创建、打开、删除和追加到文件。
将FileInfo类用于典型的操作,如复制、移动、重命名、创建、打开、删除和追加到文件。
4.许多FileInfo方法在您创建或打开文件时返回其他 I/O 类型。可以使用这些其他类型进一步操作文件。有关更多信息,请参见特定的FileInfo成员,如Open、OpenRead、OpenText、CreateText或Create。
如果打算多次重用某个对象,可考虑使用 FileInfo的实例方法,而不是File类的相应静态方法,因为并不总是需要安全检查。
默认情况下,将向所有用户授予对新文件的完全读/写访问权限。
下表描述了用于自定义各种 FileInfo 方法的行为的枚举。
枚举 | 说明 |
---|---|
FileAccess | 指定对文件的读取和写入访问。 |
FileShare | 为已在使用中的文件指定允许的访问级别。 |
FileMode | 指定是保留还是改写现有文件的内容,并指定创建现有文件的请求是否会导致异常。 |
![]() 注意 |
---|
在接受路径作为输入字符串的成员中,路径必须是格式良好的,否则将引发异常。例如,如果路径是完全限定的但以空格开头,则路径在类的方法中不会被修剪。因此,路径的格式不是良好的,并将引发异常。同样,路径或路径的组合不能被完全限定两次。例如,“c:\temp c:\windows”在大多数情况下也将引发异常。在使用接受路径字符串的方法时,请确保路径是格式良好的。 |
代码如下:
static void Main(string[] args) { //进行导入Exel数据 try { WxyhData context = new WxyhData(); string fileDir = Properties.Settings.Default.ExcelFileDir;//进行读取Exel的路径 string fishFile = Properties.Settings.Default.FinishedFileDir;//结束的Exel 的路径 List<string> files = FilesGetter.GetFiles(fileDir);//进行获取目录下面的EXEL int successCount = 0; int updateCount = 0; #region 1.先判断目录是否为空 if (files.Count() > 0) { List<string> processedData = new List<string>(); Console.WriteLine("开始从根目录{0}导入文件", fileDir); #region 2.去掉读取Copy中的文件夹里面的内容 foreach (string fileExc in files) { //判断文件是否存在 if (System.IO.File.Exists(fileExc)) { //如果是以E:\temp\finished 那么就不进行读取否则才进行读取原因是这个是备份的文件 if (fileExc.StartsWith(fishFile) == false) { GlobalTools.WriteLog("AutoGetMXIntAcct", 0, "开始从目录:" + fileDir + "导入文件:" + fileExc); try { Workbook book = new Workbook(fileExc); var cells = book.Worksheets[0].Cells; //从文件第1行开始读取 var table = cells.ExportDataTableAsString(0, 0, cells.MaxRow + 1, cells.MaxColumn + 1, true); GlobalTools.WriteLog("AutoGetMXIntAcct", 0, "开始从目录:" + fileDir + "导入文件:" + fileExc + ", 共" + table.Rows.Count + "条数据"); #region 3.进行逐条的读取Exel中的每一条的数据进行添加到数据库MX_Int_Acct表中 for (int i = 0; i < table.Rows.Count; i++) { #region 3.进行读取Exel var row = table.Rows[i]; string sys_CifCode = "";//手机号码 string sysAccount = ""; //身份证号 int balance = 0; string acctName = ""; try { sys_CifCode = ((string)row["手机号码"]).Trim(); balance = int.Parse((row["活动积分"]).ToString().Trim()); acctName = ((string)row["显示名称"]).Trim() ?? string.Empty; sysAccount = ((string)row["身份证号码"]).Trim(); } catch { sysAccount = string.Empty; acctName = string.Empty; } int count = context.MX_INT_ACCT.Where(p => p.SYS_CIF_CODE == sys_CifCode).Count(); //如果存在记录就就行更新否则就就行插入的动作. if (count > 0) { MX_INT_ACCT mxIntAcct = context.MX_INT_ACCT.Where(p => p.SYS_CIF_CODE == sys_CifCode).FirstOrDefault(); mxIntAcct.ACCT_NAME = acctName; mxIntAcct.BALANCE = balance; mxIntAcct.SYS_CIF_CODE = sys_CifCode; mxIntAcct.UPDATE_DATE = DateTime.Now; mxIntAcct.SYS_ACCOUNT = sysAccount; updateCount++; Console.WriteLine("更新成功{0}数据", updateCount); } else { if (processedData.Contains(sys_CifCode)) { continue; } processedData.Add(sys_CifCode); MX_INT_ACCT mxIntAcct = IntitalMxIntAcct(acctName, balance, sysAccount, sys_CifCode); context.MX_INT_ACCT.AddObject(mxIntAcct); successCount++; Console.WriteLine("导入成功{0}数据", successCount); } #endregion } using (TransactionScope trans = new TransactionScope(TransactionScopeOption.Required)) { context.SaveChanges(); trans.Complete(); } #endregion } catch (Exception ex) { GlobalTools.WriteLog("AutoGetMXIntAcct", 0, "异常消息" + ex.ToString()); GlobalTools.WriteErrLog("AutoGetMXIntAcct", ex); } } else { Console.WriteLine(@"E:\temp\File目录中的备份的文件不进行读取!"); } } } #endregion } #endregion //Exel文件删除 FileInfoExc(files); } catch (Exception ex) { GlobalTools.WriteLog("AutoMxAcctInt", 0, "错误的日志" + ex.ToString()); } } /// <summary> ///将添加的文件进行保存到指定目录以及当前的文件进行删除 /// </summary> /// <param name="files"></param> private static void FileInfoExc(List<string> files) { foreach (string fileExc in files) { FileInfo fileInfo = new FileInfo(fileExc); string copyfileDir = Properties.Settings.Default.FinishedFileDir; string copypath = copyfileDir + "\\" + fileInfo.Name + "-copy-" + DateTime.Now.ToString("yyyy-MM-dd-HHmmss"); //File.Move(fileExc, copypath); File.Move(fileExc, copypath); //File.Copy(fileExc, copypath); File.Delete(fileExc); GlobalTools.WriteLog("AutoGetMXIntAcct", 0, "文件移动到:" + copypath); } }
相关文章推荐
- .Net中通过反射技术的应用----插件程序的开发入门
- 【Android应用开发】-(18)静默方式实现批量安装卸载应用程序
- .Net中通过反射技术的应用----插件程序的开发入门
- .Net中通过反射技术的应用----插件程序的开发入门
- 【Android应用开发】-(18)静默方式实现批量安装卸载应用程序
- 【转】.Net中通过反射技术的应用----插件程序的开发入门
- [置顶] 【Android应用开发】-(18)静默方式实现批量安装卸载应用程序
- 【原创】《Linux高级程序设计》杨宗德著 - 进程管理与程序开发 - 信号应用实例 分类: Linux --- 应用程序设计 2014-11-09 11:33 66人阅读 评论(0) 收藏
- Cocoa框架是iOS应用程序的基础,了解Cocoa框架,对开发iOS应用有很大的帮助。 1、Cocoa是什么? Cocoa是OS X和 iOS操作系统的程序的运行环境。 是什么因素使一个程序成为Co
- win8应用商店程序开发-保存/读取本地应用程序设置
- 基于.NET的Windows数据库应用程序开发的心路历程 --我的程序“猿”进化之路
- .NET 应用程序界面开发经验总结 设计良好的程序的表现之一就是细节做的还可以
- 微软MSDN给出的使用.Net开发Windows Form网络应用相关程序的优化建议
- VS开发】如何给console控制台程序更换应用程序图标
- 利用.NET开发DB2 Everyplace应用程序
- 在.NET客户端程序中应用多线程
- .net开发应用的最佳选择
- 应用MFC开发高级应用程序
- 开发.Net平台应用系统框架
- 如何使用.net来部署使用了水晶报表开发出来的exe程序