hit counter for blogger

黑暗執行緒

 黑暗執行緒搬新家囉!! http://www.darkthread.net

9/14/2006

KB-To Delete DataRow via DataAdapter

用DataAdpater+CommandBuilder來新增、修改、刪除資料真是件爽快的事兒,但過去我用它Update資料的經驗不多,所以今天在處理刪除時,出了點問題。
我先簡單介紹一下如何用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