




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第8章章 數(shù)據(jù)庫應(yīng)用數(shù)據(jù)庫應(yīng)用8.1 數(shù)據(jù)庫基礎(chǔ)數(shù)據(jù)庫基礎(chǔ)8.2 ADO.NET概述概述8.3 創(chuàng)建連接創(chuàng)建連接8.4 Command對象與對象與DataReader對象對象8.5 DataSet對象與對象與DataAdapter對象對象8.1 數(shù)據(jù)庫基礎(chǔ)數(shù)據(jù)庫基礎(chǔ)8.1.1 數(shù)據(jù)庫和數(shù)據(jù)庫管理系統(tǒng)數(shù)據(jù)庫和數(shù)據(jù)庫管理系統(tǒng)X1. 數(shù)據(jù)庫基本概念數(shù)據(jù)庫基本概念數(shù)據(jù)庫(Database,簡稱DB),顧名思義,就是存放數(shù)據(jù)的倉庫,其特點(diǎn)是數(shù)據(jù)按照數(shù)據(jù)模型組織,是高度結(jié)構(gòu)化的,可供多個(gè)用戶共享并且具有一定的安全性。8.1.1 數(shù)據(jù)庫和數(shù)據(jù)庫管理系統(tǒng)數(shù)據(jù)庫和數(shù)據(jù)庫管理系統(tǒng)X2. 數(shù)據(jù)庫管理系統(tǒng)數(shù)據(jù)庫管理
2、系統(tǒng)打開數(shù)據(jù)庫管理器(SQL Server Management Studio)如圖8.1所示(圖中的數(shù)據(jù)庫是后來添加的)。8.1.2 表和視圖表和視圖X1. 表(表(Table)表是在日常工作和生活中經(jīng)常使用的一種表示數(shù)據(jù)及其關(guān)系的形式,例如表8.1就是一個(gè)學(xué)生情況表。學(xué)學(xué) 號號姓姓 名名專業(yè)名專業(yè)名性性 別別出出 生生 時(shí)時(shí) 間間081101王 林計(jì)算機(jī)男1990/10/01081102王 巍計(jì)算機(jī)女1991/02/08081103林 滔通信工程男1990/04/06081104江為中通信工程男1990/12/088.1.2 表和視圖表和視圖X2. 視圖(視圖(View)視圖是從一個(gè)或多個(gè)
3、表(或視圖)導(dǎo)出的表。視圖與表不同,它是一個(gè)虛表,即視圖所對應(yīng)的數(shù)據(jù)不進(jìn)行實(shí)際存儲,數(shù)據(jù)庫中只存儲視圖的定義,對視圖的數(shù)據(jù)進(jìn)行操作時(shí),系統(tǒng)根據(jù)視圖的定義去操作與視圖相關(guān)聯(lián)的基本表。視圖一經(jīng)定義以后,就可以象表一樣被查詢、修改、刪除和更新。使用視圖具有便于數(shù)據(jù)共享、簡化用戶權(quán)限管理和屏蔽數(shù)據(jù)庫的復(fù)雜性等優(yōu)點(diǎn)。8.1.3 用用VS2010創(chuàng)建數(shù)據(jù)庫和表創(chuàng)建數(shù)據(jù)庫和表X1. 創(chuàng)建數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫用VS2010創(chuàng)建數(shù)據(jù)庫的步驟如下所示:(1) 打開VS2010打開“服務(wù)器資源管理器”窗口右擊“數(shù)據(jù)連接”選擇“創(chuàng)建新SQL Server 數(shù)據(jù)庫”選項(xiàng),如圖8.2所示。選擇此項(xiàng)8.1.3 用用VS2010
4、創(chuàng)建數(shù)據(jù)庫和表創(chuàng)建數(shù)據(jù)庫和表(2) 在“創(chuàng)建新SQL Server 數(shù)據(jù)庫”對話框中選擇要連接的服務(wù)器名輸入新的數(shù)據(jù)庫名單擊“確定”按鈕,如圖8.3所示,系統(tǒng)添加了一個(gè)數(shù)據(jù)庫。選擇服務(wù)器輸入數(shù)據(jù)庫名“XSCJ”8.1.3 用用VS2010創(chuàng)建數(shù)據(jù)庫和表創(chuàng)建數(shù)據(jù)庫和表X2. 創(chuàng)建表創(chuàng)建表用VS2010創(chuàng)建表的步驟如下所示:(1) 打開“服務(wù)器資源管理器”窗口展開剛添加的數(shù)據(jù)庫“XSCJ”右擊“表”選擇“添加新表”選項(xiàng),如圖8.4所示。選擇此項(xiàng)8.1.3 用用VS2010創(chuàng)建數(shù)據(jù)庫和表創(chuàng)建數(shù)據(jù)庫和表(2) 給新表設(shè)計(jì)字段和字段類型,設(shè)計(jì)后右擊“XH”選擇“設(shè)置主鍵”選項(xiàng),XH被設(shè)置為新表的主鍵,如
5、圖8.5所示。設(shè)為主鍵8.1.3 用用VS2010創(chuàng)建數(shù)據(jù)庫和表創(chuàng)建數(shù)據(jù)庫和表(3) 關(guān)閉窗口保存對表格的修改,在彈出的選擇名稱對話框中輸入“XS”,單擊“確定”按鈕,XS表就新建成功。以同樣的方法創(chuàng)建KC(課程)表,表的結(jié)構(gòu)如圖8.6所示。8.1.4 結(jié)構(gòu)化查詢語言(結(jié)構(gòu)化查詢語言(SQL)SQL運(yùn)算符除了AND(與),OR(或),NOT(非) 邏輯運(yùn)算符,以及, , =, 比較運(yùn)算符外,還可使用下列運(yùn)算符。BETWEEN:指定運(yùn)算值范圍。LIKE:格式相符。IN:指定記錄。SQL語言中,條件子句除了可以使用常規(guī)函數(shù)外,還可使用下列函數(shù)。AVG:求平均值。COUNT:計(jì)數(shù)。SUM:求和。MA
6、X:求最大數(shù)。MIN:求最小數(shù)。8.1.4 結(jié)構(gòu)化查詢語言(結(jié)構(gòu)化查詢語言(SQL)表8.2列出了常用的SQL命令及其相應(yīng)的功能,表8.3列出了常用到的一些SQL子句,這些命令和子句經(jīng)過一定的組合,可以創(chuàng)建一個(gè)SQL語句,用于完成數(shù)據(jù)庫操作功能。命命 令令分分 類類功功 能能SELECTDML根據(jù)查詢條件查詢數(shù)據(jù)表INSERTDML向數(shù)據(jù)表中插入記錄UPDATEDML更改數(shù)據(jù)表的記錄DELETEDML刪除數(shù)據(jù)表的記錄CREATEDDL創(chuàng)建一個(gè)表、字段或索引ALTERDDL添加一個(gè)字段或改變一個(gè)字段的定義DROPDDL刪除一個(gè)表或索引子子 句句功功 能能FROM指定要操作的數(shù)據(jù)表WHERE指定查
7、詢條件GROUP BY指定分組條件HAVING 指定在一個(gè)查詢中每一個(gè)組的條件ORDER BY指定查詢的排序8.1.4 結(jié)構(gòu)化查詢語言(結(jié)構(gòu)化查詢語言(SQL)X1SELECT語句語句一個(gè)典型的SQL查詢可以從指定的數(shù)據(jù)庫表中“選擇”信息,這時(shí)就需要使用SELECT語句執(zhí)行。它的最簡單形式是:SELECT * FROM tableName其中,星號(*)用來指定從數(shù)據(jù)庫的tableName表中選擇所有的字段(列)。例如,若要查詢Course表中所有記錄,則可用下列語句:SELECT * FROM Course若要從表中選擇指定字段的記錄,則將星號(*)用字段列表代替,多個(gè)字段之間用逗號分隔,例
8、如:SELECT courseno,credit,coursename FROM Course8.1.4 結(jié)構(gòu)化查詢語言(結(jié)構(gòu)化查詢語言(SQL)執(zhí)行的結(jié)果如圖8.7所示,可以看出查詢的結(jié)果記錄集合(簡稱為“結(jié)果集”)中的字段順序是由SELECT語句中的字段順序決定的。8.1.4 結(jié)構(gòu)化查詢語言(結(jié)構(gòu)化查詢語言(SQL)X2WHERE子句子句在數(shù)據(jù)表查詢SELECT語句中,經(jīng)常還需要使用WHERE子句來設(shè)定查詢的條件。它的一般形式如下:SELECT columnl,column2,F(xiàn)ROM tableName WHERE condition例如,若將Score表中成績(score)在80分以上
9、的記錄查詢出來,則可使用下列語句:SELECT studentno, score FROM Score WHERE score=80WHERE子句中的條件可以包含(大于)、=(大于等于)、=(等于)、(不等于)和LIKE等運(yùn)算符。其中,LIKE用于匹配條件的查詢,它可以使用星號(*)和問號(?)等通配符,星號(*)表示可以出現(xiàn)0個(gè)或多個(gè)字符,問號(?)表示該位置處只能出現(xiàn)1個(gè)字符。例如:SELECT * FROM Score WHERE studentno LIKE 21*8.1.4 結(jié)構(gòu)化查詢語言(結(jié)構(gòu)化查詢語言(SQL)X3ORDER BY子句子句在數(shù)據(jù)表查詢SELECT語句中,若將查詢到
10、的記錄進(jìn)行排序,則可使用ORDER BY子句。如下面的形式:SELECT columnl,column2,F(xiàn)ROM tableName WHERE conditionORDER BY coll,col2,ASC或SELECT columnl,column2,F(xiàn)ROM tableName WHERE conditionORDER BY col1,col2,DESC8.1.4 結(jié)構(gòu)化查詢語言(結(jié)構(gòu)化查詢語言(SQL)X4INNER JOIN語句語句INNER JOIN的最簡單形式是:SELECT columnl,column2FROM table1INNER JOIN table2ON table
11、l.columnName= table2.columnNameINNER JOIN將tablel和table2表進(jìn)行內(nèi)聯(lián),其聯(lián)接的條件由ON子句設(shè)定。通過ON子句指定這兩個(gè)表中的哪些列進(jìn)行比較,從而確定最終需要合并的記錄。例如:SELECT Score. studentno, Score.courseno,Course.coursename, Score. scoreFROM Score INNER JOIN Course ON Score.courseno=Course.coursenoORDER BY studentno, courseno8.1.4 結(jié)構(gòu)化查詢語言(結(jié)構(gòu)化查詢語言(SQL
12、)X5INSERT語句語句INSERT語句用來向表中插入一個(gè)新的記錄。該語句的常用形式是:INSERT INTO tableName(coll,col2,col3,colN)VALUES (vall,va12,val3,vaIN)其中,tableName用來指定插入新記錄的數(shù)據(jù)表,tableName后跟一對圓括號,包含一個(gè)以逗號分隔的列(字段)名的列表,VALUES后面的圓括號內(nèi)是一個(gè)以逗號分隔的值列表,它與tableName后面的列名列表是一一對應(yīng)的。需要說明的是,若某個(gè)記錄的某個(gè)字段值是字符串,則需要用單引號括起來。例如:INSERT INTO Student(studentno,stud
13、entname)VALUES (21010503,張小峰)8.1.4 結(jié)構(gòu)化查詢語言(結(jié)構(gòu)化查詢語言(SQL)X6UPDATE語句語句UPDATE語句用于更新表中的數(shù)據(jù)。該語句的常用形式是:UPDATE tableName SET columnl=valuel,column2=value2,columnN=valueNWHERE condition該語句可以更新tableName表中一行記錄或多行記錄的數(shù)據(jù),這取決于WHERE后面的條件。關(guān)鍵字SET后面是以逗號分隔的“列名值”列表。例如:UPDATE Student SET studentname=王鵬WHERE studentno=2101
14、05038.1.4 結(jié)構(gòu)化查詢語言(結(jié)構(gòu)化查詢語言(SQL)X7DELETE語句語句DELETE語句用來從表中刪除記錄,其常用形式如下:DELETE FROM tableName WHERE condition該語句可以刪除tableNam表中一行記錄或多行記錄,這取決于WHERE后面的條件。例如:DELETE FORM Student WHERE studentno LIKE 210105*將Student表中所有以210105開頭的學(xué)號的記錄刪除。8.1.5 數(shù)據(jù)訪問命名空間數(shù)據(jù)訪問命名空間X1System.Data該命名空間是由ADO.NET(ActiveX Data Object,Ac
15、tiveX數(shù)據(jù)對象)類組成的,它是托管應(yīng)用程序中主要數(shù)據(jù)訪問方法。ADO.NET組件能夠有效地管理來自多個(gè)數(shù)據(jù)源的數(shù)據(jù),并為分布式應(yīng)用程序中的數(shù)據(jù)進(jìn)行請求、更新和協(xié)調(diào)提供相應(yīng)的工具。X2System.Data.Common該命名空間包含由.NET框架中數(shù)據(jù)提供程序共享的類,用于在托管空間中訪問數(shù)據(jù)源,旨在給開發(fā)人員提供一種方法以編寫將作用于所有 .NET Framework 數(shù)據(jù)提供程序的 ADO.NET 代碼。X3System.Data.Odbc該命名空間用于在托管空間中訪問ODBC(Open Database Connectivity,開放數(shù)據(jù)庫連接)數(shù)據(jù)源。8.1.5 數(shù)據(jù)訪問命名空間數(shù)
16、據(jù)訪問命名空間X4System.Data.OleDb該命名空間用于OLE DB(OLE Data Base,OLE數(shù)據(jù)庫)數(shù)據(jù)源的連接、執(zhí)行命令以及讀取等。OLE DB試圖提供一種統(tǒng)一的數(shù)據(jù)訪問接口,并除了處理標(biāo)準(zhǔn)關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)之外,還能處理包括郵件數(shù)據(jù)、Web上的文本或圖形、目錄服務(wù)(Directory Services)以及主機(jī)系統(tǒng)中的IMS和VSAM數(shù)據(jù)。OLE DB提供一個(gè)數(shù)據(jù)庫編程COM(組件對象模型)接口,使得數(shù)據(jù)的使用者(應(yīng)用程序)可以使用同樣的方法訪問各種數(shù)據(jù),而不用考慮數(shù)據(jù)的具體存儲地點(diǎn)、格式或類型。X5System.Data.SqlClient該命名空間用于SQL S
17、erver7.0及以上數(shù)據(jù)源的連接、執(zhí)行命令以及讀取等。它與System.Data.OleDb命名空間類似,但它為訪問SQL Server 7.0及更高版本進(jìn)行了優(yōu)化。8.1.5 數(shù)據(jù)訪問命名空間數(shù)據(jù)訪問命名空間X6System.Data.SqITypes該命名空間用于為SQL Server內(nèi)部提供內(nèi)部安全、快捷的數(shù)據(jù)類。X7System.Data.OracleClient該命名空間用于Oracle數(shù)據(jù)源的連接、執(zhí)行命令以及讀取等。X8System.Xml該命名空間用于支持XML數(shù)據(jù)的處理。8.1.5 數(shù)據(jù)訪問命名空間數(shù)據(jù)訪問命名空間【例例8.1】根據(jù)上面介紹創(chuàng)建數(shù)據(jù)庫,命名為“STUINF”
18、,用于記錄學(xué)生信息,包括記錄學(xué)生信息表,表名為“Student”,記錄學(xué)生課程成績表,表名為“Score”以及記錄課程的表,表名為“Course”,使用SQL語句插入、更新和查詢記錄(在第一部分使用界面方式創(chuàng)建數(shù)據(jù)庫和表,在這里使用SQL語句創(chuàng)建數(shù)據(jù)庫和表)。設(shè)計(jì)步驟:(1) 打開數(shù)據(jù)庫管理器依次單擊“開始”“所有程序”“Microsoft SQL Server 2008”“SQL Server Management Studio”,打開數(shù)據(jù)庫管理工具,在彈出的“聯(lián)接到服務(wù)器”對話框中選擇“服務(wù)器名稱”和“身份驗(yàn)證”,單擊“連接”按鈕連接到所選擇的服務(wù)器。8.1.5 數(shù)據(jù)訪問命名空間數(shù)據(jù)訪問命
19、名空間(2) 創(chuàng)建數(shù)據(jù)庫單擊“新建查詢”工具按鈕,在打開的查詢設(shè)計(jì)器窗口中輸入創(chuàng)建數(shù)據(jù)庫“STUINF”的T-SQL語句,單擊執(zhí)行按鈕“ ”創(chuàng)建數(shù)據(jù)庫。代碼如下所示:CREATE DATABASE STUINF(3) 創(chuàng)建表在查詢設(shè)計(jì)器窗口中輸入創(chuàng)建表“Student”、“Course”和“Score”的T-SQL語句,單擊執(zhí)行按鈕“ ”創(chuàng)建表,代碼所示。8.1.5 數(shù)據(jù)訪問命名空間數(shù)據(jù)訪問命名空間(4) 插入數(shù)據(jù)信息以及查詢數(shù)據(jù)信息在查詢設(shè)計(jì)器窗口中輸入插入及查詢T-SQL語句,單擊執(zhí)行按鈕“ ”執(zhí)行此語句,結(jié)果如圖8.8所示,代碼如下所示:USE STUINFGOINSERT INTO S
20、tudent(studentno,studentname,xb,birthday,native,address)VALUES (081101,王林,男,1989-3-10,江蘇南京,南京師范大學(xué))INSERT INTO Student(studentno,studentname,xb,birthday,native,address)VALUES (081102,李小鋒,男,1987-10-3,江蘇南京,南京師范大學(xué))SELECT * FROM Student8.2 ADO.NET概述概述8.2.1 ADO.NET基本概念與特點(diǎn)基本概念與特點(diǎn)ADO.NET數(shù)據(jù)模型從ADO發(fā)展而來,但它不只是對A
21、DO的改進(jìn),而是采用了一種全新的技術(shù)。主要表現(xiàn)在以下幾個(gè)方面:(1) ADO.NET不是采用 ActiveX 技術(shù),而是與.NET框架緊密結(jié)合的產(chǎn)物。(2) ADO.NET包含對 XML 標(biāo)準(zhǔn)的完全支持,這對于跨平臺交換數(shù)據(jù)具有重要的意義。(3) ADO.NET既能在與數(shù)據(jù)源連接的環(huán)境下工作,又能在斷開與數(shù)據(jù)源連接的條件下工作。8.2.1 ADO.NET基本概念與特點(diǎn)基本概念與特點(diǎn)最重要的是,ADO.NET 通過多種方式封裝和隱藏了很多數(shù)據(jù)庫訪問的細(xì)節(jié)。可以完全不知道對象在與 ADO.NET 對象交互,也不用擔(dān)心數(shù)據(jù)移動到另外一個(gè)數(shù)據(jù)庫或者從另一個(gè)數(shù)據(jù)庫獲得數(shù)據(jù)的細(xì)節(jié)問題。如圖8.9所示顯示了
22、ADO.NET 架構(gòu)總覽。8.2.1 ADO.NET基本概念與特點(diǎn)基本概念與特點(diǎn)在ADO.NET中數(shù)據(jù)集與數(shù)據(jù)提供器是兩個(gè)非常重要而又相互關(guān)聯(lián)的核心組件:數(shù)據(jù)集(DataSet)與數(shù)據(jù)提供器(Provider)。它們之間的關(guān)系如圖8.10所示。8.2.2 ADO.NET對象模型的結(jié)構(gòu)對象模型的結(jié)構(gòu)圖8.11展示了ADO.NET對象模型中的主要對象。當(dāng)然,實(shí)際上,ADO.NET類庫是很復(fù)雜的,但我們現(xiàn)在需要了解的是ADO.NET對象模型中有哪些主要對象,它們之間是如何交互的。8.2.2 ADO.NET對象模型的結(jié)構(gòu)對象模型的結(jié)構(gòu)X1. 數(shù)據(jù)提供程序數(shù)據(jù)提供程序數(shù)據(jù)提供程序組件屬于數(shù)據(jù)源(Data
23、 Source)。在.NET框架下的數(shù)據(jù)提供程序具有功能相同的對象,但這些對象的名稱、部分屬性或方法可能不同。如SQL Server對象名稱以SQL為前綴(如SqlConnection對象),而OLEDB對象名稱以O(shè)leDb為前綴(如OleDbConnection對象),ODBC對象則以O(shè)dbc為前綴(如OdbcConnection)。8.2.2 ADO.NET對象模型的結(jié)構(gòu)對象模型的結(jié)構(gòu)X2. 數(shù)據(jù)集數(shù)據(jù)集數(shù)據(jù)集(DataSet)是記錄在內(nèi)存中的數(shù)據(jù),它的結(jié)構(gòu)如圖8.12所示。8.3 創(chuàng)建連接創(chuàng)建連接8.3.1 創(chuàng)建創(chuàng)建Connection對象對象ConnectionString的主要參數(shù)有
24、:Data Source:設(shè)置需連接的數(shù)據(jù)庫服務(wù)器名。Initial Catalog:設(shè)置連接的數(shù)據(jù)庫名稱。Integrated Security:服務(wù)器的安全性設(shè)置,是否使用信任連接。值有True、False和SSPI三種,True和SSPI都表示使用信任連接。Workstation Id:數(shù)據(jù)庫客戶端標(biāo)識。默認(rèn)為客戶端計(jì)算機(jī)名。Packet Size:獲取與SQL Server通信的網(wǎng)絡(luò)數(shù)據(jù)包的大小,單位為字節(jié),有效值為51232767,默認(rèn)值為8192。User ID:登錄SQL Server的帳號。Password(Pwd):登錄SQL Server的密碼。Connection Tim
25、eout:設(shè)置SqlConnection對象連接SQL數(shù)據(jù)庫服務(wù)器的超時(shí)時(shí)間,單位為秒,若在所設(shè)置的時(shí)間內(nèi)無法連接數(shù)據(jù)庫,則返回失敗。默認(rèn)為15秒。8.3.1 創(chuàng)建創(chuàng)建Connection對象對象Connection對象的構(gòu)造函數(shù)有兩個(gè)版本,沒有參數(shù)的版本創(chuàng)建一個(gè)ConnectionString屬性為空的新連接,帶參數(shù)的版本接受一個(gè)字符串作為ConnectionString屬性的值。以下是使用帶參數(shù)的構(gòu)造函數(shù)的例子:System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection (Provid
26、er=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:data.mdb; ); 下面是采用無參數(shù)構(gòu)造函數(shù),然后修改ConnectionString屬性的例子:System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection (); 設(shè)置ConnectionString屬性的語句是:conn.ConnectionString = Data Source=MySQLServer; / 服務(wù)器名user id=sa;password=123456
27、; / 安全信息Initial catalog=Northwind; Integrated Security=False; / 數(shù)據(jù)庫名以其他參數(shù)8.3.2 使用使用Connection對象對象表8.4列出了Connection對象常用的方法:方方 法法說說 明明Open()打開與數(shù)據(jù)庫的連接。注意ConnectionString屬性只對連接屬性進(jìn)行了設(shè)置,并不打開與數(shù)據(jù)庫的連接,必須使用Open()方法打開連接。Close()關(guān)閉數(shù)據(jù)庫連接。ChangeDatabase()在打開連接的狀態(tài)下,更改當(dāng)前數(shù)據(jù)庫。CreateCommand()創(chuàng)建并返回與Connection對象有關(guān)的Comman
28、d對象。Dispose()調(diào)用Close()方法關(guān)閉與數(shù)據(jù)庫的連接,并釋放所占用的系統(tǒng)資源。8.3.2 使用使用Connection對象對象X1. 利用利用trycatchfinally語句塊語句塊確保釋放資源的第一種方式是利用trycatchfinally語句塊,確保在finally塊中關(guān)閉任何已打開的連接。下面是一個(gè)小示例:try / Open the connection conn.Open(); / Do something usefulcatch ( Exception ex ) / Do something about the exceptionfinally / Ensure t
29、hat the connection is freed conn.Close ( ) ; 8.3.2 使用使用Connection對象對象X2. 使用使用using語句塊語句塊上面兩種方法都沒有好的異常處理方法來替代,所以有時(shí)需要結(jié)合起來使用,下面的例子結(jié)合了trycatchfinally和using技術(shù)確保數(shù)據(jù)連接及時(shí)關(guān)閉。trycatchfinally與using的內(nèi)外嵌套關(guān)系可以根據(jù)需要決定。string source = server=(local)NetSDK; + integrated security=SSPI; + database=Northwind;using ( SqlC
30、onnection conn = new SqlConnection ( source ) ) / Open the connection conn.Open ( ) ; / Do something useful8.3.2 使用使用Connection對象對象【例例8.2】在using語句塊中打開【例8.1】所建的數(shù)據(jù)庫連接,并顯示數(shù)據(jù)庫連接狀態(tài)。新建WinForm項(xiàng)目,在Form1的設(shè)計(jì)視圖中將此窗體調(diào)整到適當(dāng)?shù)拇笮〔ext屬性設(shè)為“數(shù)據(jù)庫連接”。從工具箱中拖放一個(gè)Button控件到此窗體中,其Text屬性設(shè)置為“測試”。引用命名空間:System.Data.SqlClient;8.3
31、.2 使用使用Connection對象對象切換到窗體設(shè)計(jì)視圖,雙擊button1,添加Click事件,代碼如下所示: private void button1_Click(object sender, EventArgs e) string strcon = Data Source=(local)SQLEXPRESS;Initial Catalog=STUINF;Integrated Security=True; SqlConnection sqlcon; using (sqlcon = new SqlConnection(strcon) sqlcon.Open(); /打開數(shù)據(jù)庫連接 Mes
32、sageBox.Show(數(shù)據(jù)庫連接狀態(tài): + sqlcon.State.ToString(), 第一個(gè)對話框); MessageBox.Show(數(shù)據(jù)庫連接狀態(tài): + sqlcon.State.ToString(), 第二個(gè)對話框)8.3.2 使用使用Connection對象對象運(yùn)行程序,單擊“測試”按鈕,運(yùn)行結(jié)果如圖8.13所示。 8.4 Command對象與對象與DataReader對象對象8.4.1 創(chuàng)建創(chuàng)建Command對象對象如果要通過代碼在運(yùn)行時(shí)創(chuàng)建Command對象,可以使用4個(gè)版本的構(gòu)造函數(shù),如表8.5所示。原原 型型含含 義義Command()創(chuàng)建一個(gè)默認(rèn)數(shù)據(jù)命令實(shí)例Com
33、mand (cmdTxt)創(chuàng)建一個(gè)數(shù)據(jù)命令實(shí)例并設(shè)置CommandText屬性為參數(shù)cmdTxt中指定的字符串Command (cmdTxt, conn)創(chuàng)建一個(gè)數(shù)據(jù)命令實(shí)例,設(shè)置CommandText屬性為參數(shù)cmdTxt中指定的字符串,設(shè)置Connection屬性為conn中指定的數(shù)據(jù)連接對象Command(cmdTxt, conn, trans)創(chuàng)建一個(gè)數(shù)據(jù)命令實(shí)例,設(shè)置CommandText屬性為參數(shù)cmdTxt中指定的字符串,設(shè)置Connection屬性為conn中指定的數(shù)據(jù)連接對象,設(shè)置Transaction屬性為參數(shù)trans中指定的事務(wù)對象8.4.2 使用使用Command對象
34、操作數(shù)據(jù)對象操作數(shù)據(jù)Command對象的主要屬性和方法分別列于表8.6和表8.7中。屬屬 性性說說 明明CommandText取得或設(shè)置要對數(shù)據(jù)源執(zhí)行的SQL命令、存儲過程或數(shù)據(jù)表名。CommandTimeout獲取或設(shè)置Command對象的超時(shí)時(shí)間,單位為秒,為0表示不限制。默認(rèn)為30秒,即若在這個(gè)時(shí)間之內(nèi)Command對象無法執(zhí)行SQL命令,則返回失敗。CommandType獲取或設(shè)置命令類別,可取的值:StoredProcedure,TableDirect,Text,代表的含義分別為:存儲過程、數(shù)據(jù)表名和SQL語句,默認(rèn)為Text。數(shù)字、屬性的值為CommandType.StoredPr
35、ocedure、CommandType.Text等。Connection獲取或設(shè)置Command對象所使用的數(shù)據(jù)連接屬性。ParametersSQL命令參數(shù)集合。8.4.2 使用使用Command對象操作數(shù)據(jù)對象操作數(shù)據(jù)方方 法法說說 明明Cancel()取消Comand對象的執(zhí)行。CreateParameter創(chuàng)建Parameter對象。ExecuteNonQuery()執(zhí)行CommandText屬性指定的內(nèi)容,返回?cái)?shù)據(jù)表被影響行數(shù)。只有Update、Insert和Delete命令會影響的行數(shù)。該方法用于執(zhí)行對數(shù)據(jù)庫的更新操作。ExecuteReader()執(zhí)行CommandText屬性指定
36、的內(nèi)容,返回DataReader對象。ExecuteScalar()執(zhí)行CommandText屬性指定的內(nèi)容,返回結(jié)果表第一行第一列的值。該方法只能執(zhí)行Select命令。ExecuteXmlReader()執(zhí)行CommandText屬性指定的內(nèi)容,返回XmlReader對象。只有SQL Server才能用此方法。表表8.7 Command對象的常用方法對象的常用方法8.4.2 使用使用Command對象操作數(shù)據(jù)對象操作數(shù)據(jù)Command對象的CommandType屬性用于設(shè)置命令的類別:可以是存儲過程、表名或SQL語句。當(dāng)將該屬性值設(shè)為CommandType.TableDirect時(shí),要求Co
37、mmandText的值必須是表名而不能是SQL語句。例如:OleDbCommand cmd = new OleDbCommand();cmd.CommandText = students;cmd.CommandType = CommandType.TableDirect;cmd.Connection = conn;這段代碼執(zhí)行以后,將返回students表中的所有記錄。它等價(jià)于以下代碼:OleDbCommand cmd = new OleDbCommand();cmd.CommandText = Select * from students;cmd.CommandType = CommandT
38、ype.Text;cmd.Connection = conn;8.4.3 創(chuàng)建創(chuàng)建DataReader對象對象使用DataReader可以實(shí)現(xiàn)對特定數(shù)據(jù)源中的數(shù)據(jù)進(jìn)行高速、只讀、只向前的數(shù)據(jù)訪問。與數(shù)據(jù)集(DataSet)不同,DataReader是一個(gè)依賴于連接的對象。就是說,它只能在與數(shù)據(jù)源保持連接的狀態(tài)下工作。所有 DataReader 對象的基類均為 DbDataReader類。同Command類似,每個(gè) .NET Framework 數(shù)據(jù)提供程序包括一個(gè)DataReader對象:OLE DB .NET Framework 數(shù)據(jù)提供程序包括一個(gè) OleDbDataReader 對象;S
39、QL Server .NET Framework 數(shù)據(jù)提供程序包括一個(gè) SqlDataReader 對象;ODBC .NET Framework 數(shù)據(jù)提供程序包括一個(gè)OdbcDataReader 對象;Oracle .NET Framework 數(shù)據(jù)提供程序包括一個(gè) OracleDataReader 對象。使用 DataReader 檢索數(shù)據(jù)首先必需創(chuàng)建Command對象的實(shí)例,然后通過調(diào)用 Command的ExecuteReader 方法創(chuàng)建一個(gè) DataReader,以便從數(shù)據(jù)源檢索行。以下示例創(chuàng)建SqlDataReader對象reader,其中command代表有效的 SqlComman
40、d 對象。SqlDataReader reader = command.ExecuteReader();8.4.4 使用使用DataReader對象檢索數(shù)據(jù)對象檢索數(shù)據(jù)以下代碼示例循環(huán)訪問一個(gè) DataReader 對象,并從每個(gè)行中返回兩個(gè)列。if (reader.HasRows)/判斷是否有結(jié)果返回 while (reader.Read() /依次讀取行 Console.WriteLine(t0t1, reader.GetInt32(0), reader.GetString(1);else Console.WriteLine(No rows returned.);reader.Close(
41、);8.4.4 使用使用DataReader對象檢索數(shù)據(jù)對象檢索數(shù)據(jù)DataReader對象的常見的屬性和方法分別列于表8.8和表8.9中。屬屬 性性說說 明明FieldCount獲取DataReader對象包含的記錄行數(shù)。IsClosed獲取DataReader對象的狀態(tài),為True表示關(guān)閉。Item(name,col)獲取或設(shè)置表字段值,name為字段名,col為列序號,序號從0開始。例如:objReader.Item(0)、objReader.Item(name)。ReacordsAffected獲取在執(zhí)行Insert、Update或Delete命令后受影響的行數(shù)。該屬性只有在讀取完所有
42、行且DataReader對象關(guān)閉后才會被指定。8.4.4 使用使用DataReader對象檢索數(shù)據(jù)對象檢索數(shù)據(jù)方方 法法說說 明明Close()關(guān)閉DataReader對象。GetBoolean()獲取序號為Col的列的值,所獲取列的數(shù)據(jù)類型必須為Boolean類型;其他類似的方法還有:GetByte、GetChar、GetDateTime、GetDecimal、GetDouble、GetFloat、GetInt16、GetInt32、GetInt64、GetString等。GetDataTypeName()獲取序號為Col的列的來源數(shù)據(jù)類型名。GetFieldType()獲取序號為Col的列
43、數(shù)據(jù)類型。GetName()獲取序號為Col的列的字段名。GetOrdinal(Name)獲取字段名為Name的列的序號。GetValue()獲取序號為Col的列的值。GetValues(values)獲取所有字段的值,并將字段值存放在values數(shù)組中。IsDBNull()若序號為Col的列為空值,則返回True,否則返回False。Read()讀取下一條記錄,返回布爾值。返回True表示有下一條記錄,返回False表示沒有下一條記錄。表表8.9 DataReader對象的常用方法對象的常用方法8.4.4 使用使用DataReader對象檢索數(shù)據(jù)對象檢索數(shù)據(jù) 【例例8.3】對【例8.1】所建
44、的數(shù)據(jù)庫的學(xué)生表Student進(jìn)行讀取和添加數(shù)據(jù)記錄。新建WinForm項(xiàng)目,在Form1的設(shè)計(jì)視圖中將此窗體調(diào)整到適當(dāng)?shù)拇笮〔ext屬性設(shè)為“Command對象與DataReader對象”。從工具箱中拖放2個(gè)GroupBox、2個(gè)Button、5個(gè)TextBox、1個(gè)CheckBox、1個(gè)DateTimePicker、6個(gè)Label控件到此窗體中,屬性的設(shè)置如表8.10所示。對象對象對象名對象名屬性名屬性名屬性值屬性值FormForm1TextCommand對象與DataReader對象TextBoxtxtAllStuMultilineTrueScrollBarsBothtxtStuID
45、txtNametxtNativetxtAddressGroupBoxgroupBox1Text輸入學(xué)生信息groupBox2Text顯示學(xué)生信息CheckBoxcckXBText男ButtonbtnSeachText讀取btnInsertText添加8.4.4 使用使用DataReader對象檢索數(shù)據(jù)對象檢索數(shù)據(jù)引用命名空間:System.Data.SqlClient;切換到窗體設(shè)計(jì)視圖,分別雙擊兩個(gè)按鈕,添加Click事件,代碼所示。運(yùn)行程序,單擊“讀取”按鈕讀取數(shù)據(jù)庫中所有學(xué)生信息,輸入一個(gè)新的學(xué)生信息并單擊“添加”按鈕將此學(xué)生信息插入數(shù)據(jù)庫中,再單擊“讀取”按鈕,運(yùn)行結(jié)果如圖8.14所示
46、。8.5 DataSet對象與對象與DataAdapter對象對象DataAdapter是怎樣向DataSet填充數(shù)據(jù)的?如圖8.15所示,先用Connection建立數(shù)據(jù)庫連接,相當(dāng)于在數(shù)據(jù)庫和應(yīng)用程序之間建立一座橋梁,然后再用DataAdapter來填充它。8.5.1 DataSet對象對象創(chuàng)建數(shù)據(jù)集對象的語句格式語句格式如下:DataSet ds = new DataSet (); 或者 DataSet ds = new DataSet (數(shù)據(jù)集名); DataSet對象的常用屬性列于表8.11中。屬屬 性性說說 明明CaseSensitive獲取或設(shè)置在DataTable對象中字符串比
47、較時(shí)是否區(qū)分字母的大小寫。默認(rèn)為False。DataSetName獲取或設(shè)置DataSet對象的名稱。EnforceConstraints獲取或設(shè)置執(zhí)行數(shù)據(jù)更新操作時(shí)是否遵循約束。默認(rèn)為True。HasErrorsDataSet對象內(nèi)的數(shù)據(jù)表是否存在錯(cuò)誤行。Tables獲取數(shù)據(jù)集的數(shù)據(jù)表集合(DataTableCollection),DataSet對象的所有DataTable對象都屬于DataTableCollection。8.5.1 DataSet對象對象X1數(shù)據(jù)表集合數(shù)據(jù)表集合(DataTableCollection)和數(shù)據(jù)表和數(shù)據(jù)表(DataTable)DataSet的所有數(shù)據(jù)表包含于數(shù)
48、據(jù)表集合DataTableCollection中,通過DataSet的Tables屬性訪問DataTableCollection。DataTableCollection有以下兩個(gè)屬性:Count:DataSet對象所包含的DataTable個(gè)數(shù)。Tablesindex,name:獲取DataTableCollection中下標(biāo)為index或名稱為name的數(shù)據(jù)表。如DS.Tables0表示數(shù)據(jù)集對象DS中的第一個(gè)數(shù)據(jù)表,DS.Tables1表示第二個(gè)數(shù)據(jù)表,依次類推。DS.Tablesstudents表示數(shù)據(jù)集對象DS中名稱為“students”的數(shù)據(jù)表。DataTableCollection
49、有以下常用方法:Add(table,name):向DataTableCollection中添加數(shù)據(jù)表。Clear():清除DataTableCollection中的所有數(shù)據(jù)表。CanRemove(table):判斷參數(shù)table指定的數(shù)據(jù)表能否從DataTableCollection中刪除。Contains(name):判斷名為name的數(shù)據(jù)表是否被包含在DataTableCollection中。IndexOf(table,name):獲取數(shù)據(jù)表的序號。Remove(table,name):刪除指定的數(shù)據(jù)表。RemoveAt(index):刪除下標(biāo)為index的數(shù)據(jù)表。8.5.1 DataSe
50、t對象對象表8.12、表8.13和表8.14分別列出了DataTable對象的常用屬性、常用方法和事件。屬屬 性性說說 明明Columns獲取數(shù)據(jù)表的所有字段,即DataColumnCollection集合。DataSet獲取DataTable對象所屬的DataSet對象。DefaultView獲取與數(shù)據(jù)表相關(guān)的DataView對象。DataView對象可用來顯示DataTable對象的部分?jǐn)?shù)據(jù)。可通過對數(shù)據(jù)表選擇、排序等操作獲得DataView(相當(dāng)于數(shù)據(jù)庫中的視圖)。PrimaryKey獲取或設(shè)置數(shù)據(jù)表的主鍵。Rows獲取數(shù)據(jù)表的所有行,即DataRowCollection集合。Table
51、Name獲取或設(shè)置數(shù)據(jù)表名。8.5.1 DataSet對象對象方方 法法說說 明明Copy()復(fù)制DataTable對象的結(jié)構(gòu)和數(shù)據(jù),返回與本DataTable對象具有同樣結(jié)構(gòu)和數(shù)據(jù)的DataTable對象。NewRow()創(chuàng)建一個(gè)與當(dāng)前數(shù)據(jù)表有相同字段結(jié)構(gòu)的數(shù)據(jù)行。GetErrors()獲取包含錯(cuò)誤的DataRow對象數(shù)組。事事 件件說說 明明ColumnChanged當(dāng) 數(shù) 據(jù) 行 中 某 字 段 值 發(fā) 生 變 化 時(shí) 將 觸 發(fā) 該 事 件 。 該 事 件 參 數(shù) 為DataColumnChangeEventArgs,可以取的值為:Column(值被改變的字段);Row(字段值被改變的
52、數(shù)據(jù)行)。RowChanged當(dāng)數(shù)據(jù)行更新成功時(shí)將觸發(fā)該事件。該事件參數(shù)為DataRowChangeEventArgs,可以取的值為:Action(對數(shù)據(jù)行進(jìn)行的更新操作名,包括:Add加入數(shù)據(jù)表;Change修改數(shù)據(jù)行內(nèi)容;Commit數(shù)據(jù)行的修改已提交;Delete數(shù)據(jù)行已被刪除;RollBack數(shù)據(jù)行的更改被取消);Row(發(fā)生更新操作的數(shù)據(jù)行)。RowDeleted數(shù)據(jù)行被成功刪除后將觸發(fā)該事件。該事件參數(shù)為DataRowDeleteEventArgs,可以取的值與RowChanged事件的DataRowChangeEventArgs參數(shù)相同。表表8.13 DataTable對象的常用
53、方法對象的常用方法表表8.14 DataTable對象的事件對象的事件8.5.1 DataSet對象對象X2數(shù)據(jù)列集合數(shù)據(jù)列集合(DataColumnCollection)和數(shù)據(jù)列和數(shù)據(jù)列(DataColumn)數(shù)據(jù)表中的所有字段都被存放于數(shù)據(jù)列集合DataColumnColection中,通過DataTable的Columns屬性訪問DataColumnCollection。例如:stuTable.Columnsi.Caption代表stuTable數(shù)據(jù)表的第i個(gè)字段的標(biāo)題。DataColumnColection有以下2個(gè)屬性:Count:數(shù)據(jù)表所包含的字段個(gè)數(shù)。Columnsindex,name:獲取下
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)莊基地出租合同范本
- 買賣物業(yè)用房合同范本
- 醫(yī)療行業(yè)會議服務(wù)合同范例
- 廚房滅火維保合同范本
- 合資購車經(jīng)營合同范本
- 吊車合伙經(jīng)營合同范本
- 含稅購貨合同范本
- 運(yùn)動俱樂部協(xié)議合同范本
- 蔬菜配送合同范本
- 入股餐廳合同范本
- 《抖音營銷教程》課件
- 2025屆山東核電校園招聘正式啟動筆試參考題庫附帶答案詳解
- 2025安徽蕪湖市運(yùn)達(dá)軌道交通建設(shè)運(yùn)營限公司招聘129人高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 2025年湖南科技職業(yè)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2025屆江蘇省無錫市江陰實(shí)驗(yàn)中學(xué)中考聯(lián)考?xì)v史試題含解析
- 中國高血壓防治指南(2024年修訂版)解讀課件
- 公路工程標(biāo)準(zhǔn)施工招標(biāo)文件(2018年版)
- (正式版)SH∕T 3548-2024 石油化工涂料防腐蝕工程施工及驗(yàn)收規(guī)范
- (高清版)JTG 3370.1-2018 公路隧道設(shè)計(jì)規(guī)范 第一冊 土建工程
- 小學(xué)科學(xué)冀人版六年級下冊全冊同步練習(xí)含答案
- 酒店前臺績效考核表
評論
0/150
提交評論