C# 读写.CSV文件、SQLHelper、事务

需求

窗体设计:

代码实现:

Main_Forn

using FileRead.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Net.Mime.MediaTypeNames;

namespace FileRead
{
    public partial class Main_Form : Form
    {
        public Main_Form()
        {
            InitializeComponent();
        }
        private DataTable dt = new DataTable();//数据表
        /// <summary>
        /// 文件是否存在
        /// </summary>
        private bool isExits = false;
        /// <summary>
        /// 是否正在上传
        /// </summary>
        private bool isUpload = false;
        private string path = @"D:\数据存储";//文件路径
        private string filePath = "";//文件路径
        /// <summary>
        /// 设置控件样式
        /// </summary>
        private void SetStyle()
        {
            btn_Upload.BackColor = Color.FromArgb(143, 188, 139);
        }
        
        /// <summary>
        /// 减少窗体闪烁
        /// </summary>
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x02000000;
                return cp;
            }
        }
        /// <summary>
        /// 配置文件 假如文件夹被删除
        /// </summary>
        private void SetFilePath()
        {
            Directory.CreateDirectory(path);
        }
        /// <summary>
        /// 运行信息
        /// </summary>
        /// <param name="text"></param>
        private void WriteLogs(string text)
        {
            this.Invoke(new Action(() =>
            {
                if (richB_Logs.Text.Length > 500)
                {
                    richB_Logs.Clear();
                }
              richB_Logs.AppendText(text+"\r\n");
            }));
           
        }
        /// <summary>
        /// 获取最新文件
        /// </summary>
        private FileTimeInfo GetLatestFileTimeInfo()
        {
            List<FileTimeInfo> list = new List<FileTimeInfo>();
            DirectoryInfo dr = new DirectoryInfo(path);
            foreach (FileInfo file in dr.GetFiles())
            {
                if (file.Extension.ToUpper() == ".CSV")
                {
                    list.Add(new FileTimeInfo()
                    {
                        FileName = file.FullName,
                        FileCreateTime = file.CreationTime
                    });
                }
            }
            var f = from x in list
                    orderby x.FileCreateTime 
                    select x;
            return f.LastOrDefault();
        }

        private void Main_Form_Load(object sender, EventArgs e)
        {

            Task.Run(() =>
            {
                this.Invoke(new Action(() =>
                {
                    SetStyle();
                    SetFilePath();
                }));
                while (true)
                {
                    this.Invoke(new Action(() =>
                    {
                        try
                        {
                            if (!isUpload)
                            {
                                FileTimeInfo f = GetLatestFileTimeInfo();
                                if (f == null)
                                {
                                    isExits = false;
                                    WriteLogs("未检测到文件");
                                    btn_Upload.Enabled = false;
                                    dgv_Infos.DataSource = null;
                                }
                                else
                                {
                                    btn_Upload.Enabled = true;
                                    isExits = true;
                                    filePath = f.FileName;//文件路径
                                                          //读取文件
                                    ReadCSV(filePath, out dt);
                                    dgv_Infos.DataSource = dt;
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            isExits = false;
                            btn_Upload.Enabled = false;
                            dgv_Infos.DataSource = null;
                            WriteLogs(ex.Message);
                        }
                       

                    }));
                    Task.Delay(700).Wait();
                }
            });

        }

        private void btn_Upload_Click(object sender, EventArgs e)
        {
            if (isExits)//文件存在
            {
                btn_Upload.Enabled = false;
                Task.Run(() =>
                {
                    TranslationHelper daltran = new TranslationHelper();//实例化封装好的事务类的TransactionDal
                    int erro = 0;
                    daltran.BeginTransaction();
                    isUpload = true;
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        string location = dt.Rows[i]["Location"].ToString();
                        string left = float.Parse(dt.Rows[i]["LeftAngle"].ToString()).ToString("0.0");
                        string right = float.Parse(dt.Rows[i]["RightAngle"].ToString()).ToString("0.0");
                        string avgAngle = float.Parse(dt.Rows[i]["AvgAngle"].ToString()).ToString("0.0");
                        string testdate = DateTime.Parse(dt.Rows[i]["Testdate"].ToString()).ToString("yyyy-MM-dd HH:mm:ss.fff");
                        string testresult = dt.Rows[i]["Testresult"].ToString();
                        try
                        {
                            string sql = $"insert into plasmatestlist(Location,LeftAngle,RightAngle,AvgAngle,Testdate,Testresult) values('{location}','{left}','{right}','{avgAngle}','{testdate}','{testresult}')";
                            int mod = SqlHelper.ExcuteNonQuery(daltran.transaction, sql, null);
                            if (mod > 0)//添加成功
                            {
                                //WriteLogs("文件上传成功!");
                            }
                            else
                            {
                                //WriteLogs("文件上传失败!");
                                erro += 1;
                                daltran.RollbackTrasaction();
                                break;
                            }
                        }
                        catch (Exception ex)
                        {
                            WriteLogs("文件上传失败!");
                            erro += 1;
                            daltran.RollbackTrasaction();
                        }
                    }
                    if (erro==0)
                    {
                        //删除文件
                        if (File.Exists(filePath))
                        {
                            File.Delete(filePath);
                        }
                        MessageBox.Show("文件上传成功!");
                        daltran.CommitTransaction();//成功
                    }
                    daltran.DisposeTrasaction();//释放锁
                    isUpload = false;
                    this.Invoke(new Action(() =>
                    {
                        btn_Upload.Enabled = true;
                    }));
                   
                });
            }
            else
            {
                MessageBox.Show("无文件,禁止上传!");
            }
         
        }
        /// <summary>
        /// 读取文件数据
        /// </summary>
        /// <param name="path"></param>
        /// <param name="data"></param>
        private void ReadCSV(string path, out DataTable data)
        {
            StreamReader sr;
            data = new DataTable();
            data.Columns.Add("Location");
            data.Columns.Add("LeftAngle");
            data.Columns.Add("RightAngle");
            data.Columns.Add("AvgAngle");
            data.Columns.Add("Testresult");
            data.Columns.Add("Testdate");
            try
            {
                using (sr = new StreamReader(path, Encoding.GetEncoding("GB2312")))
                {
                    string str = "";
                    int i = 0;
                    while ((str = sr.ReadLine()) != null)
                    {
                        if (i == 0)
                        {
                            i += 1;
                            continue;
                        }
                        string[] val = str.Split(',');
                        DataRow drs = data.NewRow();
                        drs["Location"] = val[0];
                        drs["LeftAngle"] = val[1];
                        drs["RightAngle"] = val[2];
                        drs["AvgAngle"] = val[3];
                        drs["Testdate"] = val[4];
                        drs["Testresult"] = val[5];
                        data.Rows.Add(drs);
                    }
                }
            }
            catch (Exception ex)
            {
                foreach (Process process in Process.GetProcesses())
                {
                    if (process.ProcessName.ToUpper().Equals("EXCEL"))
                        process.Kill();
                }
                GC.Collect();
                Thread.Sleep(10);
                Console.WriteLine(ex.StackTrace);
                using (sr = new StreamReader(path, Encoding.GetEncoding("GB2312")))
                {
                    string str = "";
                    int i = 0;
                    while ((str = sr.ReadLine()) != null)
                    {
                        if (i == 0)
                        {
                            i += 1;
                            continue;
                        }
                        string[] val = str.Split(',');
                        DataRow drs = data.NewRow();
                        drs["Location"] = val[0];
                        drs["LeftAngle"] = val[1];
                        drs["RightAngle"] = val[2];
                        drs["AvgAngle"] = val[3];
                        drs["Testdate"] = val[4];
                        drs["Testresult"] = val[5];

                        data.Rows.Add(drs);
                    }
                }
            }
        }

        private void Main_Form_FormClosing(object sender, FormClosingEventArgs e)
        {
            this.Dispose();
            this.Close();
            Environment.Exit(0);
        }

        private void btn_clear_Click(object sender, EventArgs e)
        {
            richB_Logs.Clear();
        }
    }
}

FileTimeInfo.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FileRead.Models
{
    //定义一个类包含要使用的字段
    public class FileTimeInfo
    {
        public string FileName;  //文件名
        public DateTime FileCreateTime; //创建时间
    }
}

SQLHelper.cs

using System.Data.SqlClient;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;

namespace FileRead.Models
{
    public  class SqlHelper
    {
        private static readonly string connStr= ConfigurationManager.AppSettings["mysql"].ToString();

        /// <summary>
        /// 有锁的事务方法
        /// </summary>
        /// <param name="tran">事务</param>
        /// <param name="sql">sql语句</param>
        /// <param name="pms">sql语句或存储过程</param>
        /// <returns></returns>
        public static int ExcuteNonQuery(IDbTransaction tran, string sql, params MySqlParameter[] pms)
        {
            using (MySqlCommand cmd = new MySqlCommand(sql, (MySqlConnection)tran.Connection, (MySqlTransaction)tran))
            {
                if (pms != null)
                {
                    cmd.Parameters.AddRange(pms);
                }
                return cmd.ExecuteNonQuery();
            }
        }
        protected static MySqlConnection Createconnection()
        {
            MySqlConnection conn = new MySqlConnection(connStr);
            return conn;
        }

    }
}

TanslationHelper.cs:

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FileRead.Models
{
    public class TranslationHelper:SqlHelper
    {
            public MySqlConnection connect = null;
            public MySqlTransaction transaction = null;

            public void BeginTransaction()
            {
                connect = Createconnection();   //创建连接对象
                connect.Open();
                transaction = connect.BeginTransaction(); //开始事务
            }
            /// <summary>
            /// 提交事务
            /// </summary>
            public void CommitTransaction()
            {
                if (transaction != null)
                {
                    transaction.Commit();  // 提交事务
                }
            }
            /// <summary>
            /// 回滚事务
            /// </summary>
            public void RollbackTrasaction()
            {
                if (transaction != null)
                {
                    transaction.Rollback(); //回滚
                }
            }
            /// <summary>
            /// 释放事务
            /// </summary>
            public void DisposeTrasaction()
            {
                if (connect.State == ConnectionState.Open)
                {
                    connect.Close();
                }
                if (transaction != null)
                {
                    transaction.Dispose();
                }
            }
        }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执缨不祗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值