應用.NET控制檯應用程序開發批量導入程序。

一.最近一直在調整去年以及維護去年開發的項目,很久沒有在進行我的的博客了。天天抽了必定的時間在研究一些開源的框架,Drapper 以及NHibernate以及當前比較流行的SqlSuper框架 並進行對比當前的EF框架。各有優缺點。很少說了。數據庫

二.介紹一下批量導入程序的開發。windows

1.首先找到EXEL的文件的路徑進行讀取。安全

2.應用FileInfo進行讀取,讀取結束EXEL後將EXEL文件進行移動到其餘的文件夾裏面保存起來。app

3.將FileInfo類用於典型的操做,如複製、移動、重命名、建立、打開、刪除和追加到文件。框架

FileInfo類用於典型的操做,如複製、移動、重命名、建立、打開、刪除和追加到文件。

4.許多FileInfo方法在您建立或打開文件時返回其餘 I/O 類型。可使用這些其餘類型進一步操做文件。有關更多信息,請參見特定的FileInfo成員,如OpenOpenReadOpenTextCreateTextCreateui

若是打算屢次重用某個對象,可考慮使用 FileInfo的實例方法,而不是File類的相應靜態方法,由於並不老是須要安全檢查。spa

默認狀況下,將向全部用戶授予對新文件的徹底讀/寫訪問權限。日誌

下表描述了用於自定義各類 FileInfo 方法的行爲的枚舉。 對象

枚舉blog

說明

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);
            }
        }
相關文章
相關標籤/搜索