使用ADO.NET連線資料庫 DataSet轉List集合
阿新 • • 發佈:2020-08-09
日常記錄: 因為使用Quartz定時任務元件後導致類中不能成功依賴注入,沒法拿到資料,所以我就直接用ADO操作一下;
1、先從配置檔案中拿到連線字串 ,也可以直接寫上連線字元;
IConfiguration configuration = new ConfigurationBuilder() .SetBasePath(Environment.CurrentDirectory) .AddJsonFile("appsettings.json", true, true) //配置檔名 .AddInMemoryCollection() .Build();string sqlConnectionString = configuration["ConnectionStrings:Default"]; //連線字串名
2、獲取資料
//連線物件 SqlConnection con = new SqlConnection(sqlConnectionString); //建立一個DataSet DataSet LineRe = new DataSet();7 // 開啟連線 con.Open(); //SQL語句string SqlStr = "select * from LineRelation"; //資料庫命令物件 SqlCommand command = new SqlCommand(SqlStr, con); //資料介面卡 SqlDataAdapter sda = new SqlDataAdapter(); //向資料庫傳送查詢SQL語句 sda.SelectCommand = command; //Fill方法用資料填充DataSetsda.Fill(LineRe); //將轉換後的資料放入List集合 var _lineRelation = new List<LineRelation>(); //DataSetToList 轉換方法 _lineRelation = DataSetToList<LineRelation>(LineRe, 0).ToList();
3、DataSet轉List方法
/// <summary> /// DataSetToList /// </summary> /// <typeparam name="T">轉換型別</typeparam> /// <param name="dataSet">資料來源</param> /// <param name="tableIndex">需要轉換表的索引</param> /// <returns></returns> public IList<T> DataSetToList<T>(DataSet dataSet, int tableIndex) { //確認引數有效 if (dataSet == null || dataSet.Tables.Count <= 0 || tableIndex < 0) return null; DataTable dt = dataSet.Tables[tableIndex]; IList<T> list = new List<T>(); for (int i = 0; i < dt.Rows.Count; i++) { //建立泛型物件 T _t = Activator.CreateInstance<T>(); //獲取物件所有屬性 PropertyInfo[] propertyInfo = _t.GetType().GetProperties(); for (int j = 0; j < dt.Columns.Count; j++) { foreach (PropertyInfo info in propertyInfo) { //屬性名稱和列名相同時賦值 if (dt.Columns[j].ColumnName.ToUpper().Equals(info.Name.ToUpper())) { if (dt.Rows[i][j] != DBNull.Value) { info.SetValue(_t, dt.Rows[i][j], null); } else { info.SetValue(_t, null, null); } break; } } } list.Add(_t); } return list; }