第05篇:C#星夜拾遗之使用数据库
前言
C#常用來(lái)開(kāi)發(fā)數(shù)據(jù)管理類(lèi)軟件,所以學(xué)會(huì)在C#程序中使用數(shù)據(jù)庫(kù)是非常有必要的。目前微軟的兩個(gè)常用數(shù)據(jù)庫(kù)軟件分別是Access和Sql Server。讀者可以自行了解這兩種數(shù)據(jù)庫(kù)的優(yōu)劣點(diǎn),筆者不做過(guò)多說(shuō)明。這兩種數(shù)據(jù)庫(kù)也是在做開(kāi)發(fā)時(shí)最常用的。
C#訪問(wèn)數(shù)據(jù)庫(kù)是通過(guò)ADO.NET實(shí)現(xiàn)的。ADO.NET 是一組向 .NET Framework 程序員公開(kāi)數(shù)據(jù)訪問(wèn)服務(wù)的類(lèi)。ADO.NET 為創(chuàng)建分布式數(shù)據(jù)共享應(yīng)用程序提供了一組豐富的組件。它提供了對(duì)關(guān)系數(shù)據(jù)、XML 和應(yīng)用程序數(shù)據(jù)的訪問(wèn),因此是 .NET Framework 中不可缺少的一部分。ADO.NET 支持多種開(kāi)發(fā)需求,包括創(chuàng)建由應(yīng)用程序、工具、語(yǔ)言或 Internet 瀏覽器使用的前端數(shù)據(jù)庫(kù)客戶(hù)端和中間層業(yè)務(wù)對(duì)象。
MS在Framework 3.5中提供了Linq to Sql技術(shù),但本文不做探討,感興趣的朋友可以閱讀《LINQ體驗(yàn)系列文章導(dǎo)航》。本文將以Sql Server為例,介紹最基本是數(shù)據(jù)庫(kù)使用方法:數(shù)據(jù)庫(kù)連接、數(shù)據(jù)庫(kù)命令、Sql語(yǔ)句、適配器、DataSet等。如果你已經(jīng)了解了這些內(nèi)容,那么請(qǐng)關(guān)掉這篇文章,筆者對(duì)于浪費(fèi)你的寶貴時(shí)間表示歉意 :)
?
數(shù)據(jù)庫(kù)連接
1、? 引用命名控件System.Data, 并添加System.Data.SqlClient引用。
2、? 獲取連接字符串。這個(gè)字符串通常被放在App.config文件中;在Asp.NET程序里放在web.config文件中。你可以通過(guò)VS 2008 自動(dòng)生成這個(gè)連接字符串。步驟如下:“數(shù)據(jù)”菜單項(xiàng) > 添加數(shù)據(jù)源 > 選擇“數(shù)據(jù)庫(kù)”,下一步 > 點(diǎn)擊“新建連接”> 在列表中選擇“Microsoft Sql Server”,單擊“繼續(xù)”。這時(shí)會(huì)彈出一個(gè)“添加連接”的窗口,在這里選擇Sql Server服務(wù)器,如果是本機(jī),則填寫(xiě)(Local),或者點(diǎn)一個(gè)點(diǎn)即可。這里需要注意的是,如果你安裝的是Express 2005版,需要填寫(xiě) .\SqlExpress。接下來(lái)是選擇登陸方式,筆者建議初學(xué)者使用Windows身份驗(yàn)證。然后選擇數(shù)據(jù)庫(kù),選擇完成數(shù)據(jù)庫(kù)后即可點(diǎn)擊“確定”按鈕。這時(shí)回到了“選擇數(shù)據(jù)庫(kù)連接”窗口,點(diǎn)開(kāi)折疊的連接字符串部分,這里面的字符串就是一個(gè)Sql Server連接字符串了。(Access也是這個(gè)步驟,自己試試吧。)
3、? 使用這個(gè)字符串初始化一個(gè)數(shù)據(jù)庫(kù)連接對(duì)象。Sql Server 連接類(lèi)是SqlConnection,我們可以使用下面的代碼實(shí)例化一個(gè)數(shù)據(jù)庫(kù)連接對(duì)象:
SqlConnection sqlConn = new SqlConnection(connectionString);
connectionString 是上一步生成的連接字符串。如果不在構(gòu)造函數(shù)中初始化連接字符串,也可以在先實(shí)例化一個(gè)對(duì)象,然后設(shè)置ConnectionString屬性。代碼如下:
SqlConnection sqlConn = new SqlConnection();
sqlConn.ConnectionString = connectionString;
?
數(shù)據(jù)庫(kù)命令
1、? 數(shù)據(jù)庫(kù)命令在C#中使用類(lèi)SqlCommand表示。SqlCommand類(lèi)表示要對(duì) SQL Server 數(shù)據(jù)庫(kù)執(zhí)行的一個(gè) Transact-SQL 語(yǔ)句或存儲(chǔ)過(guò)程。此類(lèi)無(wú)法繼承。
2、? 實(shí)例化一個(gè)SqlCommand類(lèi),需要一個(gè)可用的數(shù)據(jù)庫(kù)連接和一個(gè)可執(zhí)行的Sql語(yǔ)句。代碼如下:
SqlCommand sqlCmd = new SqlCommand(sqlText,, sqlConn);
sqlText為可執(zhí)行的Sql語(yǔ)句,sqlConn為一個(gè)可用的數(shù)據(jù)庫(kù)連接
也可以在實(shí)例化SqlCommand對(duì)象后,設(shè)置CommandText屬性和Connection屬性。相應(yīng)的代碼如下:
SqlCommand ?sqlCmd = new SqlCommand();
sqlCmd.CommandText = sqlText;
sqlCmd.Connection = sqlConn;
?
Sql語(yǔ)句
如果你不了解Sql語(yǔ)句,那麻煩可就大了,趕快翻書(shū)吧,查查Sql語(yǔ)句該如何書(shū)寫(xiě)。如果想整點(diǎn)兒速成的東西,這里也只能給出幾個(gè)簡(jiǎn)單的語(yǔ)句:
1、? Select語(yǔ)句:作用是從數(shù)據(jù)庫(kù)中查詢(xún)數(shù)據(jù)。如果你的數(shù)據(jù)庫(kù)中有一個(gè)名為 books 的數(shù)據(jù)表,當(dāng)要從books 中查詢(xún)出所有數(shù)據(jù)時(shí),你就可以這樣寫(xiě):
Select * From books;
如果只想從books中查詢(xún)BookName(名稱(chēng))和BookAuthor(作者)兩個(gè)字段,可以這樣寫(xiě):
Select BookName, BookAuthor From books;
注:Sql語(yǔ)句是不區(qū)分大小寫(xiě)的。
如果你只想查詢(xún)名稱(chēng)為《C#星夜拾遺》的書(shū),則可以使用Where進(jìn)行條件查詢(xún):
Select BookName, BookAuthor From books Where BookName = ‘《C#星夜拾遺》’;
2、? Insert 語(yǔ)句:作用是向數(shù)據(jù)庫(kù)中插入一條數(shù)據(jù)。例如有一本書(shū)名為《C#星夜拾遺》,作者為齊飛的書(shū),你就可以使用下面的語(yǔ)句插入數(shù)據(jù)庫(kù):
Insert into books (BookName, BookAuthor) Values (‘《C#星夜拾遺》’, ‘齊飛’);
3、? Update語(yǔ)句:作用是更新一條數(shù)據(jù)庫(kù)中的數(shù)據(jù),例如需要將《C#星夜拾遺》這本書(shū)的Price字段更新為39,那么Sql語(yǔ)句應(yīng)該這樣寫(xiě):
Update books set Price=39 Where BookName=’《C#星夜拾遺》’;
注意,這里的Where條件很關(guān)鍵,如果不加Where條件,則會(huì)將整個(gè)數(shù)據(jù)表中所有行的Price都更新為39
4、? Delete語(yǔ)句:作用是刪除記錄。下面來(lái)刪除書(shū)名為《C#星夜拾遺》的記錄:
Delete From books Where BookName=’《C#星夜拾遺》’;
注意,這里的Where同樣很關(guān)鍵,如果去掉,則會(huì)刪除數(shù)據(jù)表中的所有行。
?
適配器和DataSet
相對(duì)與Sql Server的數(shù)據(jù)適配器是SqlDataAdapter,這個(gè)適配器的作用是執(zhí)行一些輔助的工作,例如填充DataSet等。下面的語(yǔ)句將使用一個(gè)SqlDataAdapter填充一個(gè)DataSet。
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = sqlCmd;
DataSet ds = new DataSet();
da.Fill(ds);
注意:在執(zhí)行Sql語(yǔ)句時(shí),都需要一個(gè)打開(kāi)的數(shù)據(jù)庫(kù)連接,也就是需要以編程的方式打開(kāi)數(shù)據(jù)庫(kù)連接,代碼為 sqlConn.Open();當(dāng)連接使用完成后,再顯示的將數(shù)據(jù)庫(kù)關(guān)閉,代碼為:sqlConn.Close();但是這里為什么沒(méi)有呢?因?yàn)?span lang="en-us">SqlDataAdapter已經(jīng)幫我們完成了這部分操作。
回過(guò)頭來(lái)說(shuō)一下DataSet,DataSet 是 ADO.NET 結(jié)構(gòu)的主要組件,它是從數(shù)據(jù)源中檢索到的數(shù)據(jù)在內(nèi)存中的緩存。DataSet 由一組 DataTable 對(duì)象組成,您可使這些對(duì)象與 DataRelation 對(duì)象互相關(guān)聯(lián)。您還可通過(guò)使用 UniqueConstraint 和 ForeignKeyConstraint 對(duì)象在 DataSet 中實(shí)施數(shù)據(jù)完整性。
我們可以將DataSet看成是一個(gè)數(shù)據(jù)表的集合,當(dāng)我們使用SqlDataAdapter對(duì)DataSet進(jìn)行數(shù)據(jù)填充后,DataSet將保存我們檢索到的數(shù)據(jù),方便我們使用。
下面假定數(shù)據(jù)表books 中存在一條BookName為《C#星夜拾遺》,BookAuthor為齊飛、Price 為39的記錄,我們的Select語(yǔ)句為:
Select BookName, BookAuthor,Price From books Where BookName = ‘《C#星夜拾遺》’;
當(dāng)使用上面的方法進(jìn)行數(shù)據(jù)填充后,我們可以使用如下代碼得到DataSet中的數(shù)據(jù):
if (ds.Tables[0].Rows.Count > 0)
{
??? foreach (DataRow dr in ds.Tables[0].Rows)
??? {
??????? string strBookName = dr["BookName"].ToString();
??????? string strAuthor = dr["BookAuthor"].ToString();
??????? double dPrice = Convert.ToDouble(dr["Price"]);
??? }
}
?
結(jié)束語(yǔ)
本文只對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)和簡(jiǎn)單Sql的使用進(jìn)行了說(shuō)明,初學(xué)者朋友可以嘗試一下書(shū)中提到的例子,由于時(shí)間倉(cāng)促,沒(méi)有將代碼整理為Demo,還望朋友們見(jiàn)諒。這些內(nèi)容只是ADO.NET的皮毛,如果想深入了解,除了多練習(xí)之外,還要看看MSDN中對(duì)于ADO.NET的講解,那才是一個(gè)完整的數(shù)據(jù)庫(kù)訪問(wèn)教程。
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/youring2/archive/2010/05/15/1736424.html
總結(jié)
以上是生活随笔為你收集整理的第05篇:C#星夜拾遗之使用数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: WPF中设置ListView的Items
- 下一篇: C#与.NET程序员面试宝典 1.3