數(shù)據(jù)庫技術與應用:chap08-1 連接式訪問_第1頁
數(shù)據(jù)庫技術與應用:chap08-1 連接式訪問_第2頁
數(shù)據(jù)庫技術與應用:chap08-1 連接式訪問_第3頁
數(shù)據(jù)庫技術與應用:chap08-1 連接式訪問_第4頁
數(shù)據(jù)庫技術與應用:chap08-1 連接式訪問_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

數(shù)據(jù)庫技術與應用第八章

數(shù)據(jù)庫訪問技術(一)連接式數(shù)據(jù)庫訪問8.1ADO.NET基礎8.2

創(chuàng)建連接8.3

命令和數(shù)據(jù)讀取器

—返回單值的查詢—執(zhí)行不返回結果的語句—返回多個結果的查詢8.4數(shù)據(jù)集和數(shù)據(jù)適配器—填充/更新數(shù)據(jù)集—執(zhí)行存儲過程8.5數(shù)據(jù)綁定第八章內容提要對數(shù)據(jù)的操作πL(σC(R))SELECTLFROMRWHEREC關系代數(shù)SQL語句數(shù)據(jù)庫訪問命令例8.1

已知Northwind數(shù)據(jù)庫OrderDetails,設計如下圖所示的訂單管理程序引例一個VB.NET數(shù)據(jù)庫應用程序鼠標拖放自動產(chǎn)生成的控件和組件自定義的功能控件綁定導航控件OrderDetails(OrderID,ProductID,UnitPrice,Quantity,Discount)OrderDetails表訂單編號商品編號商品單價商品數(shù)量商品折扣創(chuàng)建一個Windows窗體應用程序,然后進行程序設計,具體過程如下:1.添加數(shù)據(jù)源

選菜單欄的“數(shù)據(jù)”|“添加新數(shù)據(jù)源”命令,根據(jù)數(shù)據(jù)源配置向導,配置數(shù)據(jù)源為MicrosoftSQLServer,選擇本地服務器,選擇數(shù)據(jù)庫為Northwind,如右圖所示。然后,選其中表OrderDetails。例8.1程序設計步驟數(shù)據(jù)源添加完畢,在項目開發(fā)環(huán)境中,出現(xiàn)“數(shù)據(jù)源”窗口,如下圖所示。例8.1續(xù)(1)數(shù)據(jù)集數(shù)據(jù)表數(shù)據(jù)列2.

程序界面設計(1)數(shù)據(jù)源中控件拖放

從“數(shù)據(jù)源”窗口依次將OrderID、ProductID、Quantity列直接拖放到Form1窗體上。(2)用戶自定義控件例8.1續(xù)(2)例8.1

中控件與屬性設置控件類別控件name屬性設置項目屬性值Labellabel1Text記錄號label2Text商品總價label3TextButtonbutton1Text顯示記錄TextBoxtextBox1Text3.自定義功能控件編程

button1單擊事件程序例8.1續(xù)(3)PrivateSubButton1_Click(……)HandlesButton1.ClickDimiAsInteger

i=CInt(TextBox1.Text)-1

'指定行號減1,因為數(shù)組下標從0開始

BindingNavigatorPositionItem.Text=TextBox1.Text

'指定導航控件的索引值'第i行,第1列數(shù)據(jù)

OrderIDTextBox.Text=NorthwindDataSet.Tables(0).Rows(i)(0).ToString()'第i行,第2列數(shù)據(jù)

ProductIDTextBox.Text=NorthwindDataSet.Tables(0).Rows(i)(1).ToString()'第i行,第4列數(shù)據(jù)QuantityTextBox.Text=NorthwindDataSet.Tables(0).Rows(i)(3).ToString()DimtotalPrice,unitPrice,discountAsDouble

unitPrice=NorthwindDataSet.Tables(0).Rows(i)(2)discount=NorthwindDataSet.Tables(0).Rows(i)(4)totalPrice=(QuantityTextBox.Text)*unitPrice*(1-discount)Label3.Text=CStr(totalPrice)EndSub(1)數(shù)據(jù)訪問對象數(shù)據(jù)源中控件拖放,系統(tǒng)自動對數(shù)據(jù)連接對象、數(shù)據(jù)集對象、數(shù)據(jù)適配器對象編程。例8.1說明(1)(2)數(shù)據(jù)庫應用系統(tǒng)的體系結構

可分為前臺應用程序、中間數(shù)據(jù)訪問層和后臺數(shù)據(jù)庫三個層次。在.NET平臺上,數(shù)據(jù)庫應用系統(tǒng)的三層結構如下圖。例8.1說明(2)SQLServer等數(shù)據(jù)庫

ADO.NET數(shù)據(jù)訪問模型

后臺數(shù)據(jù)庫中間數(shù)據(jù)訪問模型前臺應用程序

ADO.NET是.NET平臺上的一種數(shù)據(jù)訪問技術。適用于連接環(huán)境以及斷開的環(huán)境。由兩大組件構成:數(shù)據(jù)提供程序、數(shù)據(jù)集;8.1ADO.NET簡介1.核心功能有2個:通過與數(shù)據(jù)源的活動連接來訪問數(shù)據(jù)與斷開連接的數(shù)據(jù)集和數(shù)據(jù)表進行數(shù)據(jù)交換2.核心類有4個:

Connection、Command、DataReader和DataAdapter類3.ADO.NET有5種不同的數(shù)據(jù)提供程序:①SQLServer數(shù)據(jù)提供程序②Oracle數(shù)據(jù)提供程序③OLEDB數(shù)據(jù)提供程序④ODBC數(shù)據(jù)提供程序⑤EntityClient提供程序ADO.NET數(shù)據(jù)提供程序名稱空間說明System.Data定義和部分實現(xiàn)ADO.NET體系結構的類、接口、委托和枚舉System.Data.OdbcODBC的.NETFramework數(shù)據(jù)提供程序。System.Data.OleDbOLEDB的.NETFramework數(shù)據(jù)提供程序。System.Data.SqlClientSQLServer的.NETFramework數(shù)據(jù)提供程序。System.Data.OracleClientOracle的.NETFramework數(shù)據(jù)提供程序。4種數(shù)據(jù)提供程對應的名稱空間ADO.NET數(shù)據(jù)提供程序名稱空間本課程選用SQL

Server的.NET數(shù)據(jù)提供程序。它位于System.Data.SqlClient名稱空間。ADO.NET編程藝術是構建在概念的基礎之上的。因此,應把注意力集中在概念上,學習何時以及如何使用合適的對象和方法,把想法編程現(xiàn)實。SQLServer數(shù)據(jù)提供程序的4個核心類SqlConnection

建立與SQLServer數(shù)據(jù)庫的連接SqlCommand執(zhí)行SQL語句或者存儲過程SqlDataReader為結果集提供僅向前且只讀數(shù)據(jù)流SqlDataAdapterDataSet和數(shù)據(jù)源之間的橋接器1.Dataset是具有關系數(shù)據(jù)結構的類。

能在本地內存中緩存數(shù)據(jù)源中的數(shù)據(jù),與數(shù)據(jù)適配器(DataAdapter)配合使用支持斷開式數(shù)據(jù)訪問。2.Dataset包含2個類型的集合:DataTableCollection和聯(lián)系集合DataRelationCollection。3.DataSet和DataAdapter對象配合使用方法:使用DataAdapter將數(shù)據(jù)源中的數(shù)據(jù)填充到DataSet對象中,在斷開連接的情況下做本地處理;待處理結束后,再通過DataAdapter用DataSet對象更新數(shù)據(jù)源中的數(shù)據(jù)。數(shù)據(jù)集(DataSet)支持兩種數(shù)據(jù)庫訪問方式:①連接式

通過Command直接訪問數(shù)據(jù)庫,進行查詢(與DataReader配合)或更新。②斷開式通過DataAdapter和DataSet對象進行數(shù)據(jù)庫的查詢或更新操作。ADO.NET數(shù)據(jù)庫訪問方式數(shù)據(jù)庫Connection對象Command對象DataAdapter對象DataReader對象DataSet對象應用程序連接式斷開式8.2

創(chuàng)建連接例8.2

在VB.NET程序中,建立與本地SQLSERVER2008Express服務器中

數(shù)據(jù)庫Northwind的連接,并測試連接。關鍵代碼:ImportsSystem.Data.SqlClient'導入名稱空間,該語句添加到文件Form1.vb的頭部……DimconStrAs

String="Server=.\sqlexpress;"_&"Database=Northwind;IntegratedSecurity=true;"'連接字符串DimconnAsNewSqlConnection(conStr)'創(chuàng)建連接Try

conn.Open()'打開連接MessageBox.Show("數(shù)據(jù)庫連接測試成功!","成功")CatchexAsExceptionMessageBox.Show(ex.ToString(),"失敗")Finally

conn.Close()

'關閉連接EndTrySqlConnection類SqlConnection對象負責建立或終止與SqlServer數(shù)據(jù)源的連接創(chuàng)建:屬性:連接字符串(屬性名:ConnectionString)方法:SqlConnection類Dim

對象名ASnewSqlConnection(連接字符串);

若采用Windows身份驗證方式

“IntegratedSecurity=true;Database=數(shù)據(jù)庫名;Server=服務器名”

若采用混合身份驗證方式

“uid=用戶名;pwd=口令;Database=數(shù)據(jù)庫名;Server=服務器名”

Open方法:打開指定的連接,建立與數(shù)據(jù)庫服務器的會話。

對象名.Open()

Close方法:關閉指定的連接,終止與數(shù)據(jù)庫服務器的會話。

對象名.Close()連接字符串參數(shù)SQLServer數(shù)據(jù)提供程序的連接字符串參數(shù)名稱常用別名默認值允許值說明DataSourceServer無服務器名目標SQLServer實例的名稱InitialCatalogDatabase無服務器上的任何數(shù)據(jù)庫數(shù)據(jù)庫名IntegratedSecuritytrusted_Connectionfalsetrue,falseyes,no,sspi指定身份驗證的模式。當取值為true(yes,sspi)時,為Windows

身份驗證模式;當取值為false

(no)時,為混合驗證模式,必須在連接中指定用戶ID和密碼。PasswordPWD無任意字符串不使用Windows身份驗證時的口令UserIDUID無無不使用Windows身份驗證時的用戶名創(chuàng)建連接對象DimconnStrASString="IntegratedSecurity=true;"_

&"Database=Northwind;Server=.\SqlExpress"DimconnASNewSqlConnection(connStr)DimConStrAsString="IntegratedSecurity=true;"_&"Database=Northwind;Server=.\SqlExpress"DimconnAsNewSqlConnection()

conn.ConnectionString=ConStr方法一:方法二:問題:查詢Northwind數(shù)據(jù)庫OrderDetails表中訂單編號為10250的商品總價。

8.3SqlCommand命令

待執(zhí)行的SQL語句,

SELECTsum(UnitPrice*(1-Discount)*Quantity)

FROM[OrderDetails]

WHEREOrderID='10250'在VB.NET應用程序中如何構建訪問數(shù)據(jù)庫的命令?

創(chuàng)建封裝了待執(zhí)行SQL語句的SqlCommand對象、并執(zhí)行之。

命令對象“封裝了待執(zhí)行的SQL語句,提供了執(zhí)行方法”。

其創(chuàng)建語法格式:

Dim對象名AS

new

SqlCommand(命令文本,連接)SqlCommand類SqlCommand類的屬性CommandTexts

定義命令的可執(zhí)行文本,包括SQL語句、存儲過程等。CommandType

當該屬性取值為Text時,CommandText屬性值為SQL語句;當取值StoredProcedure時,CommandText值為存儲過程。Connection

用于設置或返回數(shù)據(jù)庫的連接對象。把命令與數(shù)據(jù)庫的連接關聯(lián)起來。Parameters用于傳遞給命令對象的參數(shù)。Dim

cmd

As

SqlCommand=New

SqlCommand()

‘創(chuàng)建了一個空命令‘它未與連接關聯(lián),也沒有設置文本(即SQL),因此無法完成任何工作。

cmd.Connection=conn‘設置命令對象的Connection屬性

cmd.CommandText=sql‘設置命令對象的CommandText屬性

創(chuàng)建SqlCommand對象時,需指定其命令文本(一個嵌入式SQL語句)和將使用的連接(一個Connection對象)。創(chuàng)建命令對象Dim

sql

AsString="SELECTsum(UnitPrice*(1-Discount)*Quantity)"

sql+="

FROM[OrderDetails]WHEREOrderID='10250‘"Dim

conn

AsNew

SqlConnection("Database=Northwind;"_

&

"Server=.\SqlExpress;IntegratedSecurity=SSPI;")

Dim

cmd

As

SqlCommand=New

SqlCommand(sql,conn)

‘創(chuàng)建命令對象,同時設置其Connection和CommandText屬性。執(zhí)行命令的方法執(zhí)行命令的方法命令返回的結果類型對應的方法返回結果數(shù)據(jù)類型不返回結果(非查詢)ExecuteNonQueryInteger單個值

(查詢)ExecuteScalarObject0行或多行

(查詢)ExecuteReaderSqlDataReader例8.3

查詢Northwind數(shù)據(jù)庫“OrderDetails”表中指定訂單編號的商品總價。返回單值的查詢TextBox1TextBox2Button1PrivateSubButton1_Click(……)HandlesButton1.ClickDimconnStringAsString="Server=.\sqlexpress;"_&"Database=northwind;IntegratedSecurity=true;"

DimorderNoAsString=TextBox1.Text

DimsqlAsString="SELECTsum(UnitPrice*(1-Discount)*Quantity)"sql+="FROM[OrderDetails]WHEREOrderID='"+orderNo+"'"

DimconnAsNew

SqlConnection(connString)'創(chuàng)建連接

Dim

cmdAs

SqlCommand=New

SqlCommand(sql,conn)conn.Open()'打開連接

Dim

totalPriceAsObject

totalPrice=cmd.ExecuteScalar()

TextBox2.Text=Format(totalPrice,Style:="00.000")conn.Close()'關閉連接EndSubSqlCommand的

ExecuteScalar方法關鍵代碼IF

IsDBNull(totalPrice)

Then

TextBox2.Text="該訂單編號不存在"ElseENDIF基于SqlCommand對象的數(shù)據(jù)庫訪問步驟數(shù)據(jù)庫訪問的基本過程如下:(1)創(chuàng)建連接(2)設置SqlCommand對象的文本(3)創(chuàng)建命令(4)執(zhí)行命令例8.4向northwind數(shù)據(jù)庫categories表中插入數(shù)據(jù),并顯示categories表中當前結果。具體:1)單擊『插入』按鈕,將根據(jù)Form1上后兩個文本框中的輸入值,向categories表中插入數(shù)據(jù);2)單擊『顯示』按鈕,將在彈出的窗體Form2上顯示表中現(xiàn)有記錄。不返回結果的命令TextBox1TextBox2TextBox3insertBtndisplayBtnexitBtnCategories(CategoryID,CategoryName,Description,Picture)Categories表產(chǎn)品類別圖片產(chǎn)品類別描述產(chǎn)品類別名稱產(chǎn)品類別編號Insert操作的關鍵代碼PrivateSubinsertBtn_Click(…)HandlesinsertBtn.Click

DimconnStrAsString="Server=.\sqlexpress;"_

&"Database=Northwind;

integratedsecurity=true“

DimsqlinsAsString="insertintocategories(categoryName,description)values('"&TextBox2.Text&"','"

&TextBox3.Text&

"')"DimconnAsNewSqlConnection(connStr)DimcmdAsNewSqlCommand(sqlins,conn)

Tryconn.Open()cmd.ExecuteNonQuery()MessageBox.Show("插入一條記錄!","成功")

CatchexAsExceptionMessageBox.Show(ex.ToString(),"失敗")Finallyconn.Close()EndTryEndSubSqlCommand的

ExecuteNonQuery方法使用命令參數(shù)PrivateSubinsertBtn_Click(…)HandlesinsertBtn.Click

DimconnStrAsString="Server=.\sqlexpress;"_

&"Database=northwind;

integratedsecurity=true"

DimconnAsNewSqlConnection(connStr)

DimsqlinsAsString="insertinto"_

&"categories(categoryName,description)values(@name,@desc)"DimcmdAsNewSqlCommand(sqlins,conn)cmd.Parameters.Add("@name",SqlDbType.NVarChar,15)cmd.Parameters.Add("@desc",SqlDbType.NText)Tryconn.Open()

cmd.Parameters("@name").Value=TextBox2.Textcmd.Parameters("@desc").Value=TextBox3.Textcmd.ExecuteNonQuery()CatchexAsExceptionMessageBox.Show(ex.ToString(),"失敗")Finallyconn.Close()EndTryEndSub『顯示』按鈕單擊事件處理程序PrivateSubdisplayBtn_Click(…)HandlesdisplayBtn.Click

Dimf2AsNewForm2

f2.ShowDialog()

EndSub顯示窗體Form2的設計:?向項目中添加一個windows窗體,默認為Form2。?添加新數(shù)據(jù)源,根據(jù)數(shù)據(jù)源配置向導,連接到Northwind數(shù)據(jù)庫。然后選其中表categories。?

從“數(shù)據(jù)源”窗口將categories表直接拖放到Form2上。對返回多行和多列的查詢,可以采用兩種方法:(1)使用命令的ExecuteReader()方法,返回一個數(shù)據(jù)讀取器,它是SqlDataReader類的一個實例,可在結果集中讀取連續(xù)的數(shù)據(jù)行,檢索各列的值。(2)使用SqlDataAdapter的Fill方法填充數(shù)據(jù)集(DataSet),并將結果顯示在DataGridView控件中。返回多個結果的查詢數(shù)據(jù)讀取器:

是快速的、未緩存的、順序讀取(只讀)的、已連接數(shù)據(jù)源的、逐行檢索數(shù)據(jù)的數(shù)據(jù)流。它在遍歷結果集時,一次只能讀取一行。適用于只顯示數(shù)據(jù),特別是對大規(guī)模數(shù)據(jù)的情況。創(chuàng)建:

數(shù)據(jù)讀取器不能直接實例化,要通過執(zhí)行命令對象的ExecuteReader方法來創(chuàng)建它的實例。

DimrdrAsSqlDataReader=cmd.ExecuteReader()常用方法:SqlDataReader對象Read()把記錄指針往下一行移動,如果下一行沒有了(當前行是最后一行),則返回false,否則返回true。使用該方法可以從查詢結果中依次讀取每一行數(shù)據(jù)。GetValue(n)返回第n+1列的值。使用基于0的索引。Close()用于關閉DataReader對象。檢索例8.5

已知Northwind數(shù)據(jù)庫,請查詢雇員employees信息:EmployeeID、Firstname、Lastname、Title,Address并通過ListView控件顯示這些信息。結果界面如下圖所示。使用數(shù)據(jù)讀取器處理多個結果集Listview控件例8.5中控件與屬性設置控件類別控件name作用屬性設置項目屬性值listViewlistViewShow顯示查詢結果FullRowSelectTrueGridLinesTrueViewDetailsMultiSelectFalseColumns窗體上控件屬性設置其中,控件listViewShow的Columns屬性值是一個列集合,包含5個列,列標題分別設置為:ID、FirstName、LastName、Title、Address。程序關鍵代碼

Private

SubButton1_Click(……)HandlesButton1.Click

Dim

connStrAsString="Server=.\sqlexpress;

Database=northwind;

integratedsecurity=true"

DimconnAsNewSqlConnection(connStr)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論