KB-To Delete DataRow via DataAdapter
用DataAdpater+CommandBuilder來新增、修改、刪除資料真是件爽快的事兒,但過去我用它Update資料的經驗不多,所以今天在處理刪除時,出了點問題。
我先簡單介紹一下如何用DataAdapter來更新資料吧!
例如:
很簡單吧! 舉一反三,我要刪除資料時,就寫了
dt.Rows.RemoveAt(0);
da.Update(dt);
結果資料還是好好地躺在DB中,啥事也沒發生。
原來,DataAdapter要更新資料時,會以DataRow的RowState來決定要新增、修改或是刪除。如果我們把DataRow從DataTable中拔掉了,DataAdapter當然不知道有一列待刪。正確的寫法應該是:
dt.Rows[0].Delete();
da.Update(dt);
參考資料: http://blog.yam.com/thinkingmore/archives/691002.html
我先簡單介紹一下如何用DataAdapter來更新資料吧!
例如:
//建一個SELECT Command OracleConnection cn=new OracleConnection("Data Source=ORA;User Id=Blah;Password=Blah"); OracleCommand cmd=new OracleCommand("SELECT * FROM myTable WHERE PK=:pk",cn); cmd.Parameters.Add("pk",OracleDbType.Varchar2).Value="123"; //用SELECT Command建立DataAdapter OracleDataAdapter da=new OracleDataAdapter(cmd); //用DataAdapter建立CommandBuilder OracleCommandBuilder cb=new OracleCommandBuilder(da); DataTable dt=new DataTable(); //查詢資料庫後取得DataRow da.Fill(dt); //改改資料 dt.Rows[0]["Col1"]="100"; //另外新增一筆 DataRow newRow=dt.NewRow(); newRow["PK"]=555; newRow["Col1"]="123"; newRow["Col2"]="ABC"; dt.Rows.Add(newRow); //要在DB上完成以上的更新及新增動作,只要這樣做就可以 da.Update(dt); //感謝DataAdapter與CommandBuilder!!! |
很簡單吧! 舉一反三,我要刪除資料時,就寫了
dt.Rows.RemoveAt(0);
da.Update(dt);
結果資料還是好好地躺在DB中,啥事也沒發生。
原來,DataAdapter要更新資料時,會以DataRow的RowState來決定要新增、修改或是刪除。如果我們把DataRow從DataTable中拔掉了,DataAdapter當然不知道有一列待刪。正確的寫法應該是:
dt.Rows[0].Delete();
da.Update(dt);
參考資料: http://blog.yam.com/thinkingmore/archives/691002.html
0 Comments:
Post a Comment
<< Home