EF和ADO的增刪改查方法總結
l EF新增
DbContext db=new DbContext ();
1.db.物件.Add()
db.SaveChanges()
2.SqlParameter[]引數化
db.DataBase.ExecuteSqlCommand("sql語句/儲存過程",“引數”)
3.db.Set<物件>.Add()(不用反射的新增)
db.SaveChanges()
4.db.Entry(物件).State=EntityState.Added;
db.SaveChanges()
l EF刪除
DbContext db=new DbContext ();
1.db.物件.Find(id)(通過查詢的物件刪除)
db.物件.Remove()
db.SaveChanges()
2.SqlParameter[]引數化
db.DataBase.ExecuteSqlCommand("sql語句/儲存過程",“引數”)
sql引數使用@開頭
3.db.Set<物件>.Remove(db.物件.Find(id))
db.SaveChanges() 同時執行語句,只要一條不成功,全部不成功類似於事務
4.db.Entry(物件).State=EntityState.Deleted;
db.SaveChanges()
l EF修改
1.db.Entry(物件).State=EntityState.Modified
db.SaveChanges()
2.SqlParameter[]引數化
db.DataBase.ExecuteSqlCommand("sql語句/儲存過程",“引數”)
sql引數使用@開頭
l EF查詢
DbContext db=new DbContext ();
- db.物件.ToList()
- SqlParameter[]引數化
db.DataBase.SqlQuery<型別>(“sql語句/儲存過程”,”引數”).ToLIst()
儲存過程輸出引數
儲存過程返回的結果必須與類中的欄位對應,當多表聯查時,建立輔助類,輔助類中包含所需要的欄位,名稱與資料庫一致
l ADO
Sql五大物件
SqlConnection 連線物件 連線字串
SqlCommand 命令物件
SqlDataAdapter 讀取物件 不需要開啟連線物件,不需要命令物件
查詢結果為dataTable集合
定義list集合,for進行每行遍歷
迴圈中每個欄位進行賦值
SqlDataReader 讀取物件
SqlDataReader 讀取物件 和 DataSet 資料集 的比較
- 效能。
DataSet中的資料完全儲存在記憶體中,所以會佔用記憶體。但是通常情況下DataReader讀出的資料例項化以後也是在記憶體中的,所以兩者沒有多大區別。但是,當資料量極大的情況下,使用DataSet時,不論是你分頁還是不分頁,它的效率之低,和SqlDataReader相比都是不可同日而語的,尤其是你在分頁情況下,使用DataReader可以只讀所需資料,網路流量可以很小,但是DataAdapter還是必須全部讀出,網路流量你很難優化,除非你自己去深入控制。
- 方便。
DataSet資料儲存在記憶體中,可以用Adapter一次性填充,乍看方便不少,其實不然。由於dataset中的資料都是弱型別的,你用的時候不得不大量使用索引、強制型別轉換、型別轉換來完成讀取任務,麻煩而且易錯。從這方便來說,在讀取資料時那麼一點方便是不可取的。
- 離線。
DataSet是離線的,資料讀取後可以關閉資料庫連線,但是DataReader則必須在使用資料的時候一直連線資料庫。現在的專案中大多使用實體(Entity)來儲存從DataReader中讀取的資料,也能實現離線的目的,雖然麻煩一點,但是後期很方便使用。
l Ado引數化
執行速度快
l ADO呼叫儲存過程