using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Uninpho.DBOperation.Model; namespace Uninpho.Tools.components { /// /// CSV文件导入数据库工具类 /// static class CsvToListData { public static List Listdata_csvdata { get; set; } public static List Listdata_csvlist { get; set; } /// /// csv文件转datatable /// public static void CsvToDataTable(TableName tablename) { OpenFileDialog fd = new OpenFileDialog();//首先根据打开文件对话框,选择excel表格 fd.Filter = "表格|*.csv";//打开文件对话框筛选器 string strPath;//文件完整的路径名 if (fd.ShowDialog() == DialogResult.OK) { try { strPath = fd.FileName; DataTable datatable = new DataTable(); FileStream fileStream = new FileStream(strPath, FileMode.Open, FileAccess.Read, FileShare.Read); StreamReader streamReader = new StreamReader(strPath, Encoding.GetEncoding("gb2312")); string strLine = ""; //记录每次读取的一行记录 string[] arrayLine = null; //每行字段的内容 string[] tableHead = null; //表头内容 int columnCount = 0;//记录列数 bool IsFrist = true; //判断表头 while ((strLine = streamReader.ReadLine()) != null) { if (IsFrist == true) { tableHead = strLine.Split(','); IsFrist = false; columnCount = tableHead.Length; //创建列 for (int i = 0; i < columnCount; i++) { DataColumn dataColumn = new DataColumn(tableHead[i]); datatable.Columns.Add(dataColumn); } } else { arrayLine = strLine.Split(','); DataRow dataRow = datatable.NewRow(); for (int j = 0; j < columnCount; j++) { dataRow[j] = arrayLine[j]; } datatable.Rows.Add(dataRow); } } if (arrayLine != null && arrayLine.Length > 0) { datatable.DefaultView.Sort = tableHead[0]; } streamReader.Close(); streamReader.Dispose(); fileStream.Close(); fileStream.Dispose(); //此处是导入到数据表中,导入dev中需要修改,读取到的数据是datatable; //转成list导入数据库参考三张表导入功能 switch (tablename) { case TableName.T_xxxw_csvdata: Listdata_csvdata = DataTableToList(datatable, TableName.T_xxxw_csvdata); //生成唯一编码id foreach (var item in Listdata_csvdata) { string uuid = System.Guid.NewGuid().ToString("N"); item.Id = uuid; } break; case TableName.T_xxxw_csvlist: Listdata_csvlist = DataTableToList(datatable, TableName.T_xxxw_csvlist); //生成唯一编码id foreach (var item in Listdata_csvlist) { string uuid = System.Guid.NewGuid().ToString("N"); item.Id = uuid; } break; default: break; } } catch (Exception ex) { MessageBox.Show(ex.Message);//捕捉异常 } } } /// /// datatable转成实体类 /// /// 实体类 /// datatable数据 /// private static List DataTableToList(DataTable dt, TableName tablename) where T : class, new() { //需要建立辅助类 Assist_xxxwcsvdata assist_xxxwcsvdata = new Assist_xxxwcsvdata(); Assist_xxxwcsvlist assist_xxxwcsvlist = new Assist_xxxwcsvlist(); if (dt == null || dt.Rows.Count == 0) return null; List result = new List(); foreach (DataRow dr in dt.Rows) { try { T res = new T(); for (int i = 0; i < dr.Table.Columns.Count; i++) { PropertyInfo propertyInfo = null; switch (tablename) { case TableName.T_xxxw_csvdata: propertyInfo = res.GetType().GetProperty(GetTypeValue(dr.Table.Columns[i].ColumnName, assist_xxxwcsvdata), BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); break; case TableName.T_xxxw_csvlist: propertyInfo = res.GetType().GetProperty(GetTypeValue(dr.Table.Columns[i].ColumnName, assist_xxxwcsvlist), BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); break; default: break; } if (propertyInfo != null) { var value = dr[i]; switch (propertyInfo.PropertyType.FullName) { case "System.Decimal": if (value == DBNull.Value) { propertyInfo.SetValue(res, 0.0, null); break; } propertyInfo.SetValue(res, Convert.ToDecimal(value), null); break; case "System.String": if (value == DBNull.Value) { propertyInfo.SetValue(res, "-", null); break; } propertyInfo.SetValue(res, value.ToString(), null); break; case "System.Int32": if (value == DBNull.Value) { propertyInfo.SetValue(res, 0, null); break; } propertyInfo.SetValue(res, Convert.ToInt32(value), null); break; case "System.Double": if (value == DBNull.Value) { propertyInfo.SetValue(res, 0.0, null); break; } propertyInfo.SetValue(res, Convert.ToDouble(value), null); break; default: propertyInfo.SetValue(res, value, null); break; } } } result.Add(res); } catch (Exception ex) { ex = new Exception(string.Format("请检查第{0}行数据", result.Count + 2)); throw ex; } } return result; } /// /// 辅助类转化器 /// /// /// 属性值 /// 实例化类 /// private static string GetTypeValue(string s, T t) { string columnName = ""; Type assistType = t.GetType(); PropertyInfo[] properties = typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static); for (int i = 0; i < assistType.GetFields().Length; i++) { if (assistType.GetFields()[i] != null) { if (assistType.GetFields()[i].GetValue(t) != null && assistType.GetFields()[i].GetValue(t).ToString() == s) { columnName = assistType.GetFields()[i].Name; //Debug.LogError(assistType.GetFields()[i].Name); break; } } } return columnName; } } }