winform解析csv文件自動入庫並開機自啓+郵件告知執行情況

個人網站:友書小說網(http://laiyoushu.com)綠色純淨無廣告,歡迎大家前來看小說


前提:改程序的主要作用是用來每天定時自動解析客戶上傳的csv文件並將其數據入庫,執行成功之後會自動發郵件給指定的人反饋執行情況,併爲了防止某些情況下服務器被重啓,所以,也相應的加上了開機自啓功能。所有代碼均爲原創,歡迎大家一起討論IT技術以及指點出本人的不足,因爲這些都是很基礎的代碼,所以就懶得寫註釋了

PS:代碼自己反覆側過,可直接拿去用,

using NPOI.HSSF.UserModel;

using NPOI.SS.UserModel;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.Common;
using System.Text.RegularExpressions;
using System.Data.SqlClient;
using Microsoft.Win32;
using System.Net.Mail;
using System.Net;


namespace ReadExcel
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public static StreamReader sr;
        public static StreamWriter sw;
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        protected HSSFWorkbook hssfworkbook;
        //設置加入開機啓動
        private void but_start_Click(object sender, EventArgs e)
        {
            //startread();
            string path = Application.ExecutablePath;
            RegistryKey rk = Registry.LocalMachine;
            RegistryKey rk2 = rk.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
            rk2.SetValue("JcShutdown", path);
            rk2.Close();
            rk.Close();
        }
//開始
        public static void startread()
        {
            sw = new StreamWriter("C:\\堪寶CSV更新日誌文件.txt", false);
            sw.WriteLine("準備解析CSV文件!" + "    " + DateTime.Now.ToString() + "\n");
            sw.Flush();
            //string path_Url = @"c:/test.csv";
            string path_Url = @"C:/FTPLoad/CAMBRO.CSV";
            List<MV_Excel> list = new List<MV_Excel>();
            try
            {
                StreamReader sr = new StreamReader(path_Url, Encoding.Default);
                String line;
                var aa = "";
                sw.WriteLine("開始解析CSV文件!" + "    " + DateTime.Now.ToString() + "\n");
                sw.Flush();
                while ((line = sr.ReadLine()) != null)
                {
                    MV_Excel db = new MV_Excel();
                    aa = line.ToString();
                    string[] sArray = Regex.Split(aa, ",", RegexOptions.IgnoreCase);
                    db.Warehouse = sArray[0];
                    db.Item = sArray[1];
                    db.Qty = sArray[2];
                    list.Add(db);
                }
                sw.WriteLine("解析CSV完成!" + "    " + DateTime.Now.ToString() + "\n");
                sw.Flush();
                //預備插入庫
                try
                {
                    string sql = "DELETE xxx;\n";
                    for (int i = 0; i < list.Count; i++)
                    {
                        if (i > 0)
                        {
                            sql += string.Format("INSERT INTO dbo.Order_Depot(aaa, bbb, ccc)VALUES  ( '{0}','{1}','{2}');\n", list[i].Warehouse, list[i].Item, list[i].Qty);
                        }
                    }
                    using (SqlConnection con = new SqlConnection(@"server =.\sql2014;uid=sa;pwd=xxx;database=xxx"))
                    {
                        con.Open();
                        SqlCommand cmd = new SqlCommand(sql, con);
                        int status = cmd.ExecuteNonQuery();
                        if (status > 0)
                        {
                            int SuccessCount = SearchSuccessNo();
                            if (SuccessCount > 0)
                            {
                                sw.WriteLine("數據插入完成!" + "    " + DateTime.Now.ToString() + "\n");
                                sw.Flush();
                                SendMailUseZj("數據執行詳情\n", SuccessCount + "條數據插入成功!\n入庫sql語句詳情爲:\n" + sql);
                                MessageBox.Show("插入成功!");
                            }
                            else
                            {
                                sw.WriteLine("數據插入失敗!受影響行數爲:" + SuccessCount + DateTime.Now.ToString() + "\n");
                                sw.Flush();
                                SendMailUseZj("數據執行詳情", "數據插入失敗!!受影響行數爲:" + SuccessCount + "\n" + "入庫sql語句詳情爲:\n" + sql);
                                MessageBox.Show("插入成功!");
                            }
                        }
                        else
                        {
                            sw.WriteLine("數據插入失敗!\n入庫sql語句詳情爲:\n" + sql + DateTime.Now.ToString() + "\n");
                            sw.Flush();
                            SendMailUseZj("數據執行詳情", "數據插入失敗!!\n入庫sql語句詳情爲:\n" + sql);
                            MessageBox.Show("插入失敗!");
                        }
                    }
                }
                catch (Exception ex)
                {
                    SendMailUseZj("數據執行詳情", "數據插入失敗!請檢查數據庫聯機字符串是否正確!\n" + ex.ToString().Substring(0, 300));
                }
            }
            catch (Exception ex)
            {
                sw.WriteLine("解析CSV失敗!請檢查路徑是否正確、csv文件是否包含非法字符!" + DateTime.Now.ToString() + "\n" + ex.ToString().Substring(0, 300));
                sw.Flush();
                SendMailUseZj("數據執行詳情", "數據解析失敗!請檢查路徑是否正確、csv文件是否包含非法字符!\n" + ex.ToString().Substring(0, 300));
            }
        } 
//查詢受影響的行數
        public static int SearchSuccessNo()
        {
            object number = 0;
             using (SqlConnection con = new SqlConnection(@"server =.\sql2014;uid=sa;pwd=xxx;database=xxx")) 
            {
                con.Open();
                SqlCommand cmd = new SqlCommand(" SELECT COUNT(1) FROM dbo.xxx", con);
                number = cmd.ExecuteScalar();
            }
            return Convert.ToInt32(number);
        }
   //定時器,每秒執行一次
        private void timer1_Tick(object sender, EventArgs e)
        {
            this.times.Interval = 1000;
            times.Tick += new EventHandler(TimerEventProcessor);

        }

        //定時,每天兩點啓動
        private static void TimerEventProcessor(Object myObject, EventArgs myEventArgs)
        {
            if (DateTime.Now.ToString("HH:mm:ss") == "02:00:00")
            {
                startread();
            }
        } 

        private class MV_Excel
        {
            //Warehouse,Item,Qty
            public string Warehouse { get; set; }
            public string Item { get; set; }
            public string Qty { get; set; }
        }


        public static void SendMailUseZj(string email_Title, string email_Content)
        {
            try
            {
                //發信人所用郵箱的服務器 
                string smtp = "smtp.163.com";
                //發件人的郵箱 
                string mailForm = "[email protected]";
                //發件人的密碼 
                string mailPwd = "chesdfsdfing"; 
                SmtpClient client = new SmtpClient(smtp);
                client.Port = 25;
                client.UseDefaultCredentials = false;
                client.Credentials = new NetworkCredential(mailForm, mailPwd);
                /*指定如何處理待發的郵件*/
                client.DeliveryMethod = SmtpDeliveryMethod.Network;
                //MailMessage message = new MailMessage(mailForm, mailTo, mailTitle, mailContent);
                MailMessage message = new MailMessage();
                message.From = new MailAddress(mailForm, "xxx服務器", Encoding.UTF8);
                //添加收件人 
                message.To.Add("[email protected]");
                //添加抄送人
                //message.CC.Add("[email protected]");
                //郵件標題
                message.Subject = email_Title;
                //郵件內容
                message.Body = email_Content;
                //設置字符文本編碼格式
                message.BodyEncoding = Encoding.UTF8;
                message.HeadersEncoding = Encoding.UTF8;
                message.SubjectEncoding = Encoding.UTF8;
                message.IsBodyHtml = true;
                //發送郵件
                client.Send(message);
                sw.WriteLine("郵件發送成功!" + DateTime.Now.ToString());
                sw.Flush();
                sw.Close();
            }
            catch (Exception ex)
            {
                sw.WriteLine("郵件發送失敗!" + DateTime.Now.ToString());
                sw.Flush();
                sw.Close();
                MessageBox.Show("郵件發送失敗!");
            } 
        }
    }

}

如有問題,請加我QQ:631931078或352167311

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章