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