应用.NET控制台应用程序开发批量导入程序。

一.最近一直在调整去年以及维护去年开发的项目,好久没有在进行个人的博客了。每天抽了一定的时间在研究一些开源的框架,Drapper 以及NHibernate以及当前比较流行的SqlSuper框架 并进行对比当前的EF框架。各有优缺点。不多说了。

二.介绍一下批量导入程序的开发。

1.首先找到EXEL的文件的路径进行读取。

2.应用FileInfo进行读取,读取结束EXEL后将EXEL文件进行移动到其他的文件夹里面保存起来。

3.将FileInfo类用于典型的操作,如复制、移动、重命名、创建、打开、删除和追加到文件。

FileInfo类用于典型的操作,如复制、移动、重命名、创建、打开、删除和追加到文件。

4.许多FileInfo方法在您创建或打开文件时返回其他 I/O 类型。可以使用这些其他类型进一步操作文件。有关更多信息,请参见特定的FileInfo成员,如OpenOpenReadOpenTextCreateTextCreate

如果打算多次重用某个对象,可考虑使用 FileInfo的实例方法,而不是File类的相应静态方法,因为并不总是需要安全检查。

默认情况下,将向所有用户授予对新文件的完全读/写访问权限。

下表描述了用于自定义各种 FileInfo 方法的行为的枚举。 

枚举

说明

FileAccess

指定对文件的读取和写入访问。

FileShare

为已在使用中的文件指定允许的访问级别。

FileMode

指定是保留还是改写现有文件的内容,并指定创建现有文件的请求是否会导致异常。

Note注意

在接受路径作为输入字符串的成员中,路径必须是格式良好的,否则将引发异常。例如,如果路径是完全限定的但以空格开头,则路径在类的方法中不会被修剪。因此,路径的格式不是良好的,并将引发异常。同样,路径或路径的组合不能被完全限定两次。例如,“c:\temp c:\windows”在大多数情况下也将引发异常。在使用接受路径字符串的方法时,请确保路径是格式良好的。

 5.然后进行逐行读取变可以了。然后我应用的是原始的EF 进行添加的插入数据的效率不高,但是这个一个非常简单的一个程序。

代码如下:

 

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);
            }
        }

 

  

 

posted @ 2017-03-05 18:20  LowKeyC  阅读(433)  评论(0编辑  收藏  举报
有志者事竟成破釜沉舟百二秦关终属楚苦心人,天不负,卧薪尝胆,三千越甲可吞吴