DataAdapte操作資料庫

來源:互聯網
上載者:User
OleDbConnection conn = getConn(); //getConn():得到連線物件 OleDbDataAdapter adapter = new OleDbDataAdapter("select * from notes order by posttime desc",conn); 
System.Data.DataSet mydataset = new System.Data.DataSet();; //定義DataSet 
adapter.Fill(mydataset,"notes"); 
conn.Close(); 

整個過程分以下幾步: 
1. 建立資料庫連接(我是通過自己的函數,在前面的文章中有代碼) 
2. 執行個體化OleDbDataAdapter對象! 
3. 建立一個DataSet對象,執行SQL語句得到的表添加到其中 
4. 關閉資料庫連接 
通過上面的步驟就可以使用DataBind將我們得到的資料繫結到特定的控制項上了! 

下面通過OleDbDataAdapter來執行刪除特定的資料庫記錄!(DELETE) 

//刪除特定記錄,通過string類型的ID刪除欄位 
public Boolean DelNote(string delid) 

Boolean tempvalue=false; 
//串連資料庫 
try 

OleDbConnection conn = getConn(); //getConn():得到連線物件 

string selectstr = "select * from notes where id=" + delid; 
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(selectstr,conn); 

//建立OleDbCommandBuilder,必須! 
OleDbCommandBuilder mybuilder = new OleDbCommandBuilder(myDataAdapter); 
DataSet ds = new DataSet(); //建立DataSet()執行個體 
myDataAdapter.Fill(ds,"notes"); 

foreach(DataRow dr in ds.Tables["notes"].Rows) 

if(dr["id"].ToString().Equals(delid)) 

dr.Delete(); 


myDataAdapter.Update(ds,"notes"); 

//假如執行成功,則,返回TRUE,否則,返回FALSE 
conn.Close(); 
tempvalue=true; 

catch(Exception e) 

tempvalue=false; 

finally
  {
  if (conn.State.ToString() != "Close")
  {
  conn.Close(); 
return(tempvalue);
  }
  }

要通過myDataAdapter執行delete操作,我們要有下面的幾步: 

1. 建立資料庫連接(通過:OleDbConnection conn = getConn();) 
2. 執行個體化OleDbDataAdapter對象!此處並沒有用delete語句,而是先用select語句把要刪除的記錄取得 
3. 建立一個DataSet對象,並把執行select語句得到的記錄添加到其中 
4. 建立OleDbCommandBuilder對象! 並讓它與我們前面的OleDbDataAdapter對象關聯!語句如下:OleDbCommandBuilder mybuilder = new OleDbCommandBuilder(myDataAdapter); 
5. 刪除DataSet中包含表的特定記錄 

6. 執行OleDbDataAdapter對象的Update命令更新資料庫,語句如下: myDataAdapter.Update(ds,"notes"); 
7. 關閉資料庫連接 

上面步驟中的第4步,我們建立了一個OleDbCommandBuilder對象,注意是必須的!!!我們將它和OleDbDataAdapter關聯起來,監視RowUpdating事件的發生!在我們刪除了指定的記錄後,要通過執行OleDbDataAdapter對象的Update命令來更新資料庫!

    在一些應用中可能需要判斷那些資料可以進入資料(增、刪、改)的時候就不需要判斷一條記錄執行一次sql訪問了,直接修改detaset.tables 中的資料,完成後DataAdapter.Update 不需要寫sql語句, sql訪問集中執行速度快.

定義dataset的主鍵,就可通過主鍵定位到dataset的某一行,完成修改.

DtaColum[] keys=new Datacolum[1];

key[0]=ds.Tables["notes"].Colum[0];

ds.Tables["notes"].PrimaryKey=keys;

也可以直接從資料庫中載入主鍵,這不會預設完成,必須在填充DataSet之前設定DataAdapter的MissingSchemaAction屬性顯示的告訴載入主鍵資訊:

myAdapter.MissingSchemaAction=MissingSchemaAction.AddWithKey;

 

DataEow findRow=ds.Tables["notes"].Rows.Find("目標值");

定位完成後可以刪除目標行。

findRow.Delete();

也可一修改目標行.

Rows集合中的每個DataRow對象都具有屬性RowSate,可以跟蹤此行是否刪除、添加、修改,還是未作變動。

修改時會將修改完成的資料記回記憶體,同時記錄RowSate為修改。

刪除時運行delete()方法後並沒有真正刪除該行,而是將RowSate設定為Deleted,調用DateSet的Update()時尋找資料庫中該行資料,從資料庫中刪除。

insert時記錄RowStae為Insert,Update()時如果插入資料庫已有資料會返回,後面其他行不會執行操作。

執行DateSet的AceptChange()時DataSet中的資料會改變,如果是刪除行,此時RowSate設定為為Deleted的行將被刪除,此時再調用Update()將無法刪除這些行,因為Update僅影響在Rows集合中找到的行,遺漏的行被忽略。此問題也使用與Remove()方法。

在修改完成後,僅僅影響Dataset中的資料,存在與內從中。不影響資料庫中的資料。調用Update()後才能使DataSet中的記憶體資料同磁碟上的資料庫同步。

更新資料庫時即使調用了Update()也僅影響在DataSt集合中包含的行,遺漏的行會被忽略.

其實,上面的結構不僅適合與delete操作,同樣適合insert、update操作的,只要我們把上面的第5步改成相應的動作陳述式就可以的!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.