1. 程式人生 > 實用技巧 >使用ADO.NET連線資料庫 DataSet轉List集合

使用ADO.NET連線資料庫 DataSet轉List集合

日常記錄: 因為使用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方法用資料填充DataSet
sda.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;
        }