詳解Visual C#資料庫基本編程[2007/11/6]
【字體: 】【列印
   本文就來著重探討一下Visual C#資料庫基本編程,即:如何流覽記錄、修改記錄、刪除記錄和插入記錄。針對資料庫編程始終是程式設計語言的一個重要方面的內容,也是一個難點。資料庫編程的內容十分豐富,但最為基本編程的也就是那麼幾點,譬如:連接資料庫、得到需要的資料和針對資料記錄的流覽、刪除、修改、插入等操作。其中又以後面針對資料記錄的資料操作為重點。


   一。程式設計和運行的環境設置:

  (1)。視窗2000伺服器版

  (2)。Microsoft Data Acess Component 2.6 以上版本 ( MDAC 2.6 )

  (3)……Net FrameWork SDK Beta 2

   為了更清楚的說明問題,在資料庫的選用上,採用了當前比較典型的資料庫,一個是本地資料庫Access 2000,另外一個是遠端資料庫Sql Server 2000.其中本地資料庫名稱為"db.mdb",在其中定義了一張資料表"person","person"表的資料結構如下表:

   欄位名稱 欄位類型 欄位意思

id           數字          序號

xm         文本          姓名

xb         文本           性別

nl          文本            年齡

zip        文本         郵遞區號

   遠端資料庫Sql Server 2000的資料庫伺服器名稱為"Server1",資料庫名稱為"Data1",登陸的ID為"sa",口令為空,在資料庫也定義了一張"person"表,資料結構如上表。


   二。如何流覽資料:

   在《Visual C#的資料綁定》中,已經瞭解了如何把資料集中的某些欄位綁定到WinForm元件的某個屬性上,這樣程式師就可以根據以WinForm元件的來定制資料顯示的形式,並且此時的WinForm元件顯示內容就可以隨著記錄指標的變化而改變。至此可見,流覽資料記錄的關鍵就是如何改變記錄指標。要實現這種操作,就要使用到BindingManagerBase類,此類的主要作用是管理對於那些實現了對同一個資料源進行綁定的物件。說的具體些,就是能夠使得Windows表單上的已經對同一資料源進行資料綁定的元件保持同步。在BindingManagerBase類中定義了一個屬性"Position",通過這個屬性就可以改變BindingManagerBase物件中的資料指標。創建BindingManagerBase物件必須要使用到BindingContext類,其實每一個由Control類中繼承而得到的物件,都有單一的BindingContext物件,在大多數創建表單中實現資料綁定元件的BindingManagerBase物件是使用Form類的BindingContext來得到。下列代碼是以Access 2000資料庫為模型,創建的一個名稱為"myBind"的BindingManagerBase物件。

以下是引用片段:

//創建一個 OleDbConnection

string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =
db.mdb" ;

OleDbConnection myConn = new OleDbConnection ( strCon ) ;

string strCom = " SELECT * FROM person " ;

file://創建一個 DataSet

myDataSet = new DataSet ( ) ;

myConn.Open ( ) ;

file://用 OleDbDataAdapter 得到一個資料集

OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;

file://把Dataset綁定books數據表

myCommand.Fill ( myDataSet , "person" ) ;

file://關閉此OleDbConnection

myConn.Close ( ) ;

myBind = this.BindingContext [ myDataSet , "person" ] ;



   下列代碼是以Sql Server 2000資料庫為模型,創建一個名稱為"myBind"的BindingManagerBase物件。

以下是引用片段:

// 設定資料連接字串,此字串的意思是打開Sql server資料庫,伺服器名稱為server1,
資料庫為data1

string strCon = "Provider = SQLOLEDB.1 ; Persist Security Info = False ;
User ID = sa ; Initial Catalog = data1 ; Data Source = server1 " ;

OleDbConnection myConn = new OleDbConnection ( strCon ) ;

myConn.Open ( ) ;

string strCom = " SELECT * FROM person " ;

file://創建一個 DataSet

myDataSet = new DataSet ( ) ;

file://用 OleDbDataAdapter 得到一個資料集

OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;

file://把Dataset綁定person數據表

myCommand.Fill ( myDataSet , " person " ) ;

file://關閉此OleDbConnection

myConn.Close ( ) ;

myBind = this.BindingContext [ myDataSet , "person" ] ;

   得到了是同一資料源的BindingManagerBase物件,通過改變此物件的"Position"屬性值,這樣綁定資料的元件顯示的資料就隨之變化,從而實現導航資料記錄。



   < I > .導航按鈕"上一條"實現方法:

以下是引用片段:

protected void GoPrevious ( object sender , System.EventArgs e )

{

if ( myBind.Position == 0 )

MessageBox.Show ( "已經到了第一條記錄!" , "資訊提示!" , MessageBoxButtons.OK ,
MessageBoxIcon.Information ) ;

else

myBind.Position -= 1 ;

}



   < II > . 導航按鈕"下一條"實現方法:

以下是引用片段:

protected void GoNext ( object sender , System.EventArgs e )

{

if ( myBind.Position == myBind.Count -1 )

MessageBox.Show ( "已經到了最後一條記錄!", "資訊提示!" , MessageBoxButtons.OK ,
MessageBoxIcon.Information ) ;

else

myBind.Position += 1 ;

}

   < III > . 導航按鈕"至尾"實現方法:

以下是引用片段:

protected void GoLast ( object sender , System.EventArgs e )

{

myBind.Position = myBind.Count - 1 ;

}



   < IV > . 導航按鈕"至首"實現方法:

以下是引用片段:

protected void GoFirst ( object sender , System.EventArgs e )

{

myBind.Position = 0 ;

}

   注釋:"Count"是BindingManagerBase物件的另外一個重要的屬性,是資料集記錄的總數。



   三。實現刪除記錄:

   在對資料記錄進行操作的時候,有二點必須十分清晰:

   其一:在對資料記錄進行操作的時候,我想有一些程式師一定有這樣一個疑惑,當對資料庫伺服器請求資料集的時候,就會產生"DataSet"物件,用以管理資料集,這樣如果這些對資料庫伺服器的請求非常多,同樣也就會產生很多的"DataSet"物件,達到一定時候必然會使得資料庫伺服器崩潰。這種想法是自然的,但和實際並不相符,因為"DataSet"物件並不是在伺服器端產生的,而是在用戶端產生的。所以面對眾多的資料請求的時候對資料庫伺服器的影響並不十分太大。

   其二:記得在用Delphi編寫三層資料模型的時候的,每一次對資料庫的修改其實只是對第二層產生的資料集的修改,要真正修改資料庫,還必須調用一個另外的方法。在用ADO.NET處理資料庫的時候,雖然處理的直接物件是資料庫,但此時"DataSet"物件中的內容並沒有隨之改變,而綁定的資料元件顯示的資料又來源於"DataSet"物件,這樣就會產生一個錯覺,就是修改了的記錄並沒有修改掉,刪除的記錄並沒有刪除掉。所以對資料記錄進行操作的時候,在修改資料庫後,還要對"DataSet"物件進行必要的修改,這樣才能保證"DataSet"物件和資料庫內容一致、同步。下面代碼是刪除當前綁定元件顯示的記錄的程式碼,此代碼是以Access 2000資料庫為範本的:

以下是引用片段:

protected void Delete_record ( object sender , System.EventArgs e )

{

DialogResult r = MessageBox.Show ( "是否刪除當前記錄!" , "刪除當前記錄!" ,
MessageBoxButtons.YesNo , MessageBoxIcon.Question ) ;

int ss = ( int ) r ;

if ( ss == 6 ) // 按動"確定"按鈕

{

try{

file://連接到一個資料庫

string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ;
Data Source = db.mdb " ;

OleDbConnection myConn = new OleDbConnection ( strCon ) ;

myConn.Open ( ) ;

string strDele = "DELETE FROM person WHERE id= " + t_id.Text ;

OleDbCommand myCommand = new OleDbCommand ( strDele , myConn ) ;

file://從資料庫中刪除指定記錄

myCommand.ExecuteNonQuery ( ) ;

file://從DataSet中刪除指定記錄

myDataSet.Tables [ "person" ] . Rows [ myBind.Position ] . Delete ( ) ;

myDataSet.Tables [ "person" ] . AcceptChanges ( ) ;

myConn.Close ( ) ;

}

catch ( Exception ed )

{

MessageBox.Show ( "刪除記錄錯誤資訊: " + ed.ToString ( ) , "錯誤!" ) ;

}

}

}



目前線上: 會員 5 訪客 123



0
客服專線 (02) 29908080
  • Microsoft 70-488 題庫 70 題更新完成. (2014/10/30)
  • Microsoft 70-486 題庫 80 題更新完成. (2014/10/30)
  • Microsoft 70-411 (英版)題庫 208 題更新完成. (2014/10/29)
  • Juniper JN0-660 題庫 105 題上架完成. (2014/10/28)
  • Microsoft 70-410cn 中文題庫 77 題更新完成. (2014/10/28)
  • CIA 國際內部稽核師新制 Part 1 題庫 235 題更新完成. (2014/10/28)
  • Microsoft 70-410 (英版)題庫 299 題更新完成.(圖已補) (2014/10/28)
  • CIA 國際內部稽核師新制 Part 2 題庫 189 題更新完成. (2014/10/28)
  • CIA 國際內部稽核師新制 Part 3 題庫 188 題更新完成. (2014/10/28)
  • Microsoft 74-678 題庫 100 題更新完成. (2014/10/28)
  • Microsoft 70-342 題庫 89 題更新完成. (2014/10/27)
  • 微軟各科大幅變題, 考生會員請密切注意更新消息. (2014/10/25)

姓 名:
E-mail:
聯絡電話:
驗證碼:
意見與問題:


::本站來訪人數::
000920785