久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C#數(shù)據(jù)庫編程

 googo 2011-07-05

C#數(shù)據(jù)庫編程()

因?yàn)?a href="javascript:;" oncg="javascript:tagshow(event, '%ce%c4%d5%c2');" target="_self">文章太長了,所以只能打包上傳了,。

 

最近在學(xué)習(xí)C#數(shù)據(jù)庫編程,感覺書上學(xué)到的和網(wǎng)上查的資料都比較凌亂,,于是就想把這些知識(shí)整理一下,。也希望能給像我一樣正處于入門階段的朋友有所幫助。

.Net框架編寫的應(yīng)用程序需要訪問數(shù)據(jù)庫時(shí),,將使用ADO.NET來實(shí)現(xiàn)數(shù)據(jù)庫訪問,。ADO.NET類型在System.Data命名空間下及其子空間下,它包括為訪問SQL Server, OLE DB, ODBCOracle數(shù)據(jù)庫而優(yōu)化的類型,,而且這些都是基于通用類的,。因此,使用ADO.NET訪問不同的DBMS是相似的,。

ADO.NET主要用來實(shí)現(xiàn)兩個(gè)功能:數(shù)據(jù)訪問和數(shù)據(jù)表示,。

ADO.NET包含7個(gè)重要的基類,其中4個(gè)是數(shù)據(jù)訪問類,,3個(gè)是數(shù)據(jù)表示類,。

 

數(shù)據(jù)訪問類:

1.DbConnection

它主要用來提供與數(shù)據(jù)庫的連接。

2.DbCommand

DbCommand對(duì)象可以用來執(zhí)行SQL語句,、運(yùn)行存儲(chǔ)過程等,。

3.DbDataReader

此類用來讀取執(zhí)行命令所獲得的數(shù)據(jù)。

4.DbDataAdapter

DbDataAdapter叫數(shù)據(jù)適配器,,它既可以將數(shù)據(jù)庫中的數(shù)據(jù)傳輸給包含在DataSet中的表,,也可以將DataSet對(duì)象中的數(shù)據(jù)傳輸給數(shù)據(jù)庫以更新數(shù)據(jù)源。它相當(dāng)于是DataSet和數(shù)據(jù)庫的中介,。

 

數(shù)據(jù)表示類(數(shù)據(jù)表示類于上面的數(shù)據(jù)訪問類有點(diǎn)不同,,數(shù)據(jù)表示類是獨(dú)立于各數(shù)據(jù)庫平臺(tái)的,它們沒有專門用于特定數(shù)據(jù)庫管理系統(tǒng)的子類):

1.DataTable

此類用于存儲(chǔ)數(shù)據(jù)表。但它存儲(chǔ)的表不一定對(duì)映數(shù)據(jù)庫中的表,,它是一個(gè)臨時(shí)保存數(shù)據(jù)的虛擬表,。

2.DataRelation

它用來處理多個(gè)DataTable對(duì)象之間的數(shù)據(jù)關(guān)系。

3.DataSet

它是DataTableDataRelation對(duì)象的集合,。我們可以把它當(dāng)作內(nèi)存中的數(shù)據(jù)庫,,它是從數(shù)據(jù)源檢索到的數(shù)據(jù)在內(nèi)存中的緩存。它是一個(gè)功能強(qiáng)大的類,,這一方面體現(xiàn)在它有很多屬性和方法,,另一方面體現(xiàn)在與其他對(duì)象如:Web應(yīng)用程度、Windows應(yīng)用程序,、Web服務(wù)和XML文檔的結(jié)合使用上,。

 

當(dāng)然訪問數(shù)據(jù)和數(shù)據(jù)綁定也可通過控件和向?qū)硗瓿桑@往往達(dá)不到我們所需要實(shí)現(xiàn)的控制程度或不能像我們希望的那樣有效,。在這種情況下,,我們一般會(huì)選擇以編程的方式訪問數(shù)據(jù)庫。

 

1.數(shù)據(jù)庫連接

第一步是配置連接對(duì)象,,然后才可以對(duì)連接對(duì)象執(zhí)行命令,,獲得數(shù)據(jù)。

SqlConnection conn = new SqlConnection();

創(chuàng)建實(shí)例后,,可用SqlConnection.ConnectionString屬性給連接對(duì)象配置連接字符串。

conn. ConnectionString= “ConnectionString”;

當(dāng)然,,我們也可以使用構(gòu)造函數(shù)將以上兩個(gè)步驟合二為一:

SqlConnection conn= new SqlConnection(“ConnectionString”);

 

在創(chuàng)建SqlConnection對(duì)象時(shí),,應(yīng)提供與所使用數(shù)據(jù)庫通信所需的信息,如數(shù)據(jù)源的位置,、用于登錄的用戶名和密碼以及要訪問的數(shù)據(jù)庫系統(tǒng)中的某個(gè)具體的數(shù)據(jù)庫名,。(e.g:Data Source=CHINA-C17C0CDAC\\SQLEXPRESS;User id=sa;PWD=test;Database=FolktaleDB這是一個(gè)連接數(shù)據(jù)庫的字符串)其他ADO.NET的數(shù)據(jù)訪問及表示類都依靠它與數(shù)據(jù)庫進(jìn)行通信,沒有它后面的一切皆是浮云,。

 

SqlConnection類有提供屬性,,便于我們判斷當(dāng)前的連接狀態(tài)。因?yàn)樵谌魏翁囟〞r(shí)刻,,連接可以是打開也可是關(guān)閉的,。只有在連接打開時(shí)才能訪問數(shù)據(jù)庫,但數(shù)據(jù)庫連接消耗資源,,因此只有代碼使用時(shí)才打開連接,,在其他時(shí)候應(yīng)該關(guān)閉,否則可能引起內(nèi)存泄露或也可能阻止其它程序訪問數(shù)據(jù)庫,。

連接狀態(tài)可以通過SqlConnection.State來判斷,,此屬性會(huì)返回一個(gè)枚舉值(Open/Closed)

if(conn.State ==ConnectionState.Open)

{

      //Do things

 }

 

如果使用SqlConnection.Open()打開了連接,則一定要用SqlConnection.Close()方法來關(guān)閉它,,否則它不會(huì)自動(dòng)關(guān)閉的,。當(dāng)然后面會(huì)講到通過數(shù)據(jù)閱讀器關(guān)閉連接。

或者我們也可以使用Using塊,,享受自動(dòng)關(guān)閉,。在Using塊中,最后一行代碼執(zhí)行完后,,將自動(dòng)關(guān)閉連接,。

Using(SqlConnection conn=new SqlConnection(“ConnectionString”))

{

        conn.Open();

        . . .

}

這個(gè)Using是怎么做到不需要我們手工關(guān)閉的呢?因?yàn)樗軐?dǎo)致SqlConnection對(duì)象的Dispose()方法被調(diào)用,,這樣該方法就把連接給關(guān)閉了,。

 

通常我們的代碼中一般會(huì)這樣寫:

SqlConnection conn=new SqlConnection(“ConnectionString”)

try

{

        conn.Open();

}

catch

{

        //Handle exception

}

finally

{

        conn.Close();

}

 

2.數(shù)據(jù)庫命令

SqlCommand對(duì)象通過SqlConnection對(duì)象對(duì)數(shù)據(jù)庫執(zhí)行命令。SqlCommand類有4個(gè)構(gòu)造函數(shù),。其中最簡(jiǎn)單的是無參構(gòu)造函數(shù),。然后是帶一個(gè)查詢語句的參數(shù)。但一般常用的是第三種,,它帶查詢語句和SqlConnection對(duì)象,。

SqlConnection connection = new SqlConnection (connectionString)

SqlCommand command = new SqlCommand(queryString, connection);

如果構(gòu)造函數(shù)沒有參數(shù),則可以通過SqlCommand.CommandText屬性來設(shè)置,。

 

3.數(shù)據(jù)閱讀器

SqlDataReader類,,它提供的數(shù)據(jù)游標(biāo)是只向前的,所以它只能以串行的方式一次讀取一行數(shù)據(jù),,而且不能讀完幾行后再返回去讀取,,它只能一行一行的往下讀。

SqlDataReader類與一般的類有一點(diǎn)不同,,它沒有可用來創(chuàng)建實(shí)例的公有構(gòu)造函數(shù),,所以只能使用SqlCommand.ExecuteReader()來創(chuàng)建SqlDataReader實(shí)例。

e.g

SqlCommandcmd =newSqlCommand("Select * from Ending",conn);

SqlDataReaderreader = cmd.ExecuteReader();

通常也可在創(chuàng)建SqlDataReader類實(shí)例,,設(shè)定在關(guān)閉數(shù)據(jù)閱讀器的同時(shí)關(guān)閉連接,。

SqlDataReaderreader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

創(chuàng)建SqlDataReader實(shí)例后,既可用來讀取數(shù)據(jù),,又可用來獲取架構(gòu)數(shù)據(jù),。要獲取架構(gòu)數(shù)據(jù),可使用SqlDataReader.GetSchemaTable()方法,。當(dāng)然,,還有實(shí)用的方法:

SqlDataReader.FieldCount()返回一個(gè)int值,獲取行中的列數(shù)

SqlDataReader.GetName()獲取指定列的名稱

SqlDataReader.GetDataTypeName()獲取指定列的數(shù)據(jù)類型名

下面,,就結(jié)合一個(gè)實(shí)例來體會(huì)下,,上述方法的使用和SqlDataReader是如何來讀取數(shù)據(jù)的,。

 

classProgram

   {

       staticvoidMain(string[] args)

       {

           stringstrString ="Data Source= CHINA-C17C0CDAC\\SQLEXPRESS;User id=sa;PWD=test;Database=FolktaleDB ";

           //此句一開始提示有轉(zhuǎn)義錯(cuò)誤,是因?yàn)?span lang="EN-US">Data Source中有一個(gè)\,,在前面再加了個(gè)\這樣就OK

           //其中Data Source是打開SQL Server時(shí),,自動(dòng)顯示的服務(wù)器名

           //Database是需要聯(lián)系的數(shù)據(jù)庫的名字

           SqlConnectionconn =newSqlConnection(strString);

           stringtableName="Address";

           stringquery="Select * from "+tableName;

           SqlCommandcmd=newSqlCommand(query,conn);

           try

           {

               conn.Open();

               //SqlConnection.State可判斷現(xiàn)在連接狀態(tài)

               if(conn.State ==ConnectionState.Open)

               {

                   Console.WriteLine("OK");

               }

 

               //創(chuàng)建SqlDataReader對(duì)象時(shí),不能像其他對(duì)象一樣new出來,,只能使用SqlCommand.ExecuteReader()方法來獲得

               SqlDataReaderreader = cmd.ExecuteReader();

               //SqlDataReader在使用前,,必須加載行,運(yùn)用Read()方法,,如果首次調(diào)用此方法,,會(huì)加載第一行,并返回一個(gè)bool值,,表示是否成功

               //所以,,一般直接把這個(gè)方法放在whiel循環(huán)中

               //如果在加載前試圖讀取數(shù)據(jù),則會(huì)產(chǎn)生InvalidOperationException異常,,所以,,在試用前也可用SqlDataReader.HasRows屬性來判斷

               while(reader.Read())

               {

                   //sqlDataReader.FieldCount:獲取數(shù)據(jù)閱讀器中行的列數(shù),結(jié)果為一個(gè)int

                   //sqlDataReader.GetName();獲取指定列的名稱

                   for(intindex = 0; index < reader.FieldCount; index++)

                   {

                       //reader[index].ToString()都是用來提取列里面的數(shù)據(jù)的

                       Console.WriteLine(reader.GetName(index)+": "+reader[index].ToString()+";");

                   }

                   Console.WriteLine();

               }

               reader.Close();

           }

           catch(Exceptionex)

C#DBCoding1

C#DBCoding1.rar(35.4 KB)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(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)論公約

    類似文章 更多