從資料庫中查詢資料並顯示到datagridview中的兩種方法
阿新 • • 發佈:2019-02-04
第一種方法:利用SqlDataAdapter的Fill()方法,
優點:可以不用考慮資料庫表中每一列的資料型別,將資料一次性匯入到表中;
缺點:不能在查詢過程中編輯查詢的資料
string sql = "select ordernumber,materialscode,productname,materialsquantity from OrderDetails where ordernumber = @ordernumber"; SqlParameter[] pms = new SqlParameter[] { new SqlParameter("@ordernumber",SqlDbType.Int){Value= this.txtordernumber.Text.Trim()} }; public static DataTable ExecuteDataTable(string sql,params SqlParameter [] pms) { DataTable dt = new DataTable(); //dt = null; using (SqlDataAdapter sda = new SqlDataAdapter(sql,constr)) { if (pms != null) { sda.SelectCommand.Parameters.AddRange(pms); } sda.Fill(dt); } return dt; } dt = SQLHelper.ExecuteDataTable(sql,pms);
第二種方法:先建立一個類,類的屬性包含所有需要查詢的資料庫表中的列名,然後再建立一個List<類型別>集合,利用SqlDataReader 將表中的資料逐行讀取儲存到list集合中,最後將list集合賦值給datagridview的datasouce.
優點:可以在查詢過程中,編輯所查詢出的資料;
缺點:需要考慮資料庫表中每一列的資料型別和所建立的類的屬性資料型別保持一致,至少能夠自動轉換。有時如果表中的列的資料型別是float,類中該列的屬性必須需設定為double才能轉換,否則該列資料查詢時會出現異常,float和double精度不一樣。
private List<OrderSchedule> GetOrderScheduleValue() { List<OrderSchedule> list = new List<OrderSchedule>(); string sql = "select orderstartdate,ordernumber,orderstatus,orderfinishdate from OrderSchedule where orderstartdate = @orderstartdate"; SqlParameter[] pms = new SqlParameter[]{ new SqlParameter("@orderstartdate",SqlDbType.Date){Value = dtpOrderDate.Text.Trim()} }; using (SqlDataReader Reader = SQLHelper.ExecuteReader(sql, pms)) { if (Reader.HasRows) { while (Reader.Read()) { OrderSchedule ObjOrderSchedule = new OrderSchedule(); ObjOrderSchedule.orderdate = (Reader.GetDateTime(0).ToString()).Substring(0,10); ObjOrderSchedule.ordernumber = Reader.GetString(1); if (Reader.GetBoolean(2)) { ObjOrderSchedule.orderstatus = "已完成"; } else { ObjOrderSchedule.orderstatus = "沒完成"; } if (Reader.IsDBNull(3))//如果查詢到一行的orderfinisheddate列中欄位為null { ObjOrderSchedule.orderfinisheddate = ""; } else { ObjOrderSchedule.orderfinisheddate = (Reader.GetDateTime(3).ToString()).Substring(0, 10); } list.Add(ObjOrderSchedule); } } } return list; } List<OrderSchedule> objOrderSchedule = GetOrderScheduleValue(); dgvFrmCheckList.DataSource = objOrderSchedule;