日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

C#數(shù)據(jù)庫(kù)操作

 旭龍 2011-01-12

   數(shù)據(jù)庫(kù)在程序設(shè)計(jì)中的地位越來(lái)越來(lái)高,很有必要掌握這種編程方法。雖然要想在短時(shí)間內(nèi)完全掌握數(shù)據(jù)庫(kù)編程是很有難度的,但我們可以首先掌握基本的知識(shí),其他的復(fù)雜的技術(shù)其實(shí)是在這些基礎(chǔ)知識(shí)上多次迭代而產(chǎn)生的。下面我們來(lái)分篇介紹基本的數(shù)據(jù)庫(kù)的知識(shí)。這里介紹的是ADO.net(ADO和它是差不多的)。

 

 

訪問(wèn)數(shù)據(jù)庫(kù)的方法有很多,這里介紹的是ADO.NET技術(shù)。

      1. 連接和關(guān)閉數(shù)據(jù)庫(kù)

首先要連接數(shù)據(jù)庫(kù),可以通過(guò)ADO.NET connection對(duì)象來(lái)連接數(shù)據(jù)庫(kù)。ADO.NET

好幾個(gè)connection對(duì)象,例如:OleDbConnection 對(duì)象(用于訪問(wèn)通過(guò)傳統(tǒng)ADO訪問(wèn)的OLE DB數(shù)據(jù)提供者)和SqlConnection對(duì)象(提供隊(duì)SQL Server的優(yōu)化訪問(wèn))。如果要訪問(wèn)的數(shù)據(jù)庫(kù)是SQL Server就用后一個(gè)對(duì)象,否則就用前面一個(gè)對(duì)象。使用連接對(duì)象之前必須要包含相應(yīng)的命名空間。

using System.Data.OleDb;

在建立連接對(duì)象實(shí)例之前,必須先要填充連接對(duì)象的ConnectionString屬性,這個(gè)屬性包含了多個(gè)參數(shù):

   Provider  數(shù)據(jù)庫(kù)提供者的名稱

   Data Source  數(shù)據(jù)源,即數(shù)據(jù)庫(kù)的路徑

   User ID   用戶名

   Password  密碼

   DRIVER  數(shù)據(jù)庫(kù)驅(qū)動(dòng)器的名稱,如果指定了DSN就不要這個(gè)參數(shù)了

   SERVER   數(shù)據(jù)源服務(wù)器的網(wǎng)絡(luò)名稱

這個(gè)屬性初始化的格式是:(假定連接的事Access數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)文件在C : \temp目錄下)

m_cnADONetConnection.ConnectionString =

  @” Provider = Microsoft.Jet.OLEDB.4.0Data Source = C : \temp\contacts.mdb;

     User ID = zlw Password = 123456 ”;

其他類型的數(shù)據(jù)庫(kù)的提供者信息需查閱相關(guān)資料。

連接對(duì)象的屬性設(shè)置好后,就可以創(chuàng)建實(shí)例對(duì)象了:

m_cnADONetConnection = new OleDbConnection();

接下來(lái),可以打開(kāi)數(shù)據(jù)庫(kù)了:

m_cnADONetConnection.Open();

數(shù)據(jù)庫(kù)使用完畢后要關(guān)閉連接,釋放資源:

m_cnADONetConnection.Close();

m_cnADONetConnection.Dispose();

 

2.操作數(shù)據(jù)庫(kù)

A.使用sqlcommand OleDbCommand類來(lái)執(zhí)行sql語(yǔ)句。

   連接數(shù)據(jù)庫(kù)后就可以創(chuàng)建一個(gè)語(yǔ)句命令對(duì)象,然后執(zhí)行這個(gè)語(yǔ)句。

   OleDbCommand str = new OleDbCommand(select * from texts , m_cnADONetConnection);

Str.ExecuteScalar();               //執(zhí)行這個(gè)語(yǔ)句

oleDbDataReader daOle = Str.ExecuteReader();               //返回對(duì)象

daOle.FieldCount;          //返回查詢結(jié)構(gòu)當(dāng)前行的列數(shù)

daOle.GetString(i);      //返回當(dāng)前行第i列的字符串形式

daOle.Read();        // 前進(jìn)到下一條記錄

Sql語(yǔ)句的執(zhí)行函數(shù)有很多種 , 其中最有用的是ExecuteReader()這個(gè)函數(shù),這個(gè)函數(shù)返回一個(gè)OleDbDaraReader類對(duì)象,這個(gè)對(duì)象包含語(yǔ)句的查詢結(jié)果,其中有很多方法可以對(duì)數(shù)據(jù)進(jìn)行操作。

 

 

B.對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,最好的方法是創(chuàng)建DataTable對(duì)象,這個(gè)對(duì)象是數(shù)據(jù)源中數(shù)據(jù)的一個(gè)快照,可以先對(duì)DataTable進(jìn)行操作,然后再將修改的快照返回?cái)?shù)據(jù)庫(kù),以實(shí)現(xiàn)數(shù)據(jù)的更新。

在使用DataTable之前先要填充這個(gè)對(duì)象,這里利用DataAdapterFill方法。先構(gòu)造對(duì)象:

OleDbDataAdapter m_daDataAdapter = new OleDbDataAdapter

(“Select * From Contacts” ,  

                           m_cnADONetConnection);

參數(shù)1指定拷貝到DataTable中的數(shù)據(jù),參數(shù)2指定連接對(duì)象。

為了使DataTable能對(duì)數(shù)據(jù)進(jìn)行操作,此時(shí)還應(yīng)該建立一個(gè)CommandBuilder對(duì)象,這個(gè)對(duì)象建立后,并不用主動(dòng)調(diào)用它,只要將它和DataAdapter關(guān)聯(lián)起來(lái),就可以在幕后對(duì)數(shù)據(jù)進(jìn)行操作了。

OleDbCommandBuilder m_cbCommandBuilder =  new

                                      OleDbCommandBuilder(m_daDataAdapter);

準(zhǔn)備工作完成后就應(yīng)該創(chuàng)建并填充DataTable了:

      DataTable m_dtContacts = new DataTable();

      m_daDataAdapter.Fill(m_dtContacts);

 

    DataTable可以看成是一個(gè)集合,我們可以通過(guò)它來(lái)直接操作數(shù)據(jù)庫(kù)中的表。如:

   訪問(wèn)指定行中的指定列的數(shù)據(jù),可以通過(guò)語(yǔ)句:

     m_dtContacts[“行號(hào)”][“列名”] = “” ; //j將指定位置的數(shù)據(jù)修改

   字符串變量 = m_dtContacts[“行號(hào)”][“列名”] ; //取得指定位置的數(shù)據(jù)

    //在表中增加一行

     DataRow drNewRow = m_dtContacts.NewRow();

     drNewRow[“第一列名”] = str ;

     drNewRow[“第二列名”] = str;

        ……

     m_dtContacts.Rows.Add(drNewRow) ;

    //刪除一行

     m_dtContacts.Rows[“行號(hào)”].Delete();

 

在對(duì)內(nèi)存數(shù)據(jù)庫(kù)DataSet進(jìn)行修改處理后必須調(diào)用下面語(yǔ)句,才能反映到物理數(shù)據(jù)庫(kù)中:

      m_daDataAdapter.Update(m_dtContacts) ;

 

   上面介紹的修改是通過(guò)修改DataSet,然后同步物理數(shù)據(jù)庫(kù)的修改。還有一種方法是通過(guò)修改物理數(shù)據(jù)庫(kù),然后同步DataSet。這種方法是通過(guò)SQL語(yǔ)句來(lái)修改物理數(shù)據(jù)庫(kù),然后更新DataSet來(lái)同步。具體代碼為:

string strDele = "DELETE FROM Contacts where 條件 ;

OleDbCommand myCommand = new OleDbCommand ( strDele , myConn ) ;

file://從數(shù)據(jù)庫(kù)中刪除指定記錄

myCommand.ExecuteNonQuery ( ) ;  // 執(zhí)行SQL語(yǔ)句

file://DataSet中刪除指定記錄 ,同步操作

myDataSet.Tables [ " Contacts " ] . Rows [ 行號(hào) ] . Delete ( ) ;

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

 

 

 

3.綁定數(shù)據(jù)庫(kù)

    在c#中任何一個(gè)從Control類派生來(lái)的類均可以綁定數(shù)據(jù)源。綁定數(shù)據(jù)源必須要用到DataSet,這個(gè)類和DataTable類的區(qū)別就像數(shù)據(jù)庫(kù)中表和數(shù)據(jù)庫(kù)的區(qū)別,一個(gè)DataSet可以包含多個(gè)DataTable,在我們用DataAdapter填充DataTable時(shí),也可以填充DataSet,其語(yǔ)法為:

DataSet ds = new DataSet();

m-daDataAdapterFillds  , “Contacts”); // Contactsds關(guān)聯(lián)的表名

在有了ds后就可以進(jìn)行數(shù)據(jù)的綁定了

textBox1.DataBindings.Add ( "Text" , ds , "Contacts。列名" ) ; 

這句代碼將表Contacts中的某列的當(dāng)前行綁定在textBox1上。“Text”是數(shù)據(jù)類型。

使用這種方法也可以將表中某列綁定到其他的簡(jiǎn)單控件上。

當(dāng)要將數(shù)據(jù)綁定到復(fù)雜控件上,必須使用以下代碼:

ComboBox1.DataSource = ds ;
ComboBox1.DisplayMember = " Contacts
。列名
" ;
ComboBox1.ValueMember = " Contacts
。列名" ;

這種綁定將一列綁定在了ComboBox1上了,我們也可以使用上面的方法將某列中的某行綁定在ComboBox1上。

在控件的容器Form中還有一個(gè)BindingManagerBase類對(duì)象,這個(gè)對(duì)象是用來(lái)關(guān)聯(lián)關(guān)聯(lián)到此窗口的DataSet的,利用下面語(yǔ)句可以關(guān)聯(lián)這兩個(gè)對(duì)象:

BindingManagerBase bmb = this . BindingContext [ ds , "Contacts" ] ;

現(xiàn)在可以利用bmb來(lái)操作ds,其中bmb中的Position成員是用來(lái)指定ds表中的當(dāng)前行的,可以對(duì)它進(jìn)行賦值,改變ds表的當(dāng)前行,這樣可以改變綁定到此ds的空間中顯示的值。

 

對(duì)于DataSetDataTable是我們?cè)趦?nèi)存中建立的數(shù)據(jù)庫(kù)表的拷貝,其實(shí)沒(méi)有數(shù)據(jù)庫(kù)我們也可以在內(nèi)存中建立一個(gè)這樣的快照,其語(yǔ)法為:

DataSet ds = new DataSet();        // 建立一個(gè)空數(shù)據(jù)庫(kù)

DataTable dt =  ds2.Tables.Add("mdb");  //建立一張表

dt.Columns.Add("01"typeof(string));   //添加一列

dt.Columns.Add("02"typeof(string));   //再添加一列

DataRow dr2 = ds2.Tables["mdb"].NewRow();  //添加一個(gè)新行

dr2[0] = "1";   //為行賦值

dr2[1] = "2";

ds2.Tables["mdb"].Rows.Add(dr2) ;    //將行添加到表中

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多