ASP.NET數(shù)據(jù)庫(kù)編程之Access連接失敗
在討論實(shí)際命令之前,我們需要了解的是AccessDataSource控件派生于SqlDataSource控件。在大多數(shù)情況下,這只是一個(gè)背景問(wèn)題。但是當(dāng)處理異常的時(shí)候,就必須使用實(shí)際上存在于(從而以之命名的)SQL數(shù)據(jù)源對(duì)象之中的對(duì)象。
軟著陸的技術(shù)使用的代碼將在AccessDataSource控件經(jīng)歷OnSelected event時(shí)被觸發(fā)。當(dāng)GridView從數(shù)據(jù)源控件請(qǐng)求數(shù)據(jù)時(shí),這個(gè)事件將會(huì)在內(nèi)部觸發(fā)。 處理連接錯(cuò)誤的代碼就會(huì)檢查到從數(shù)據(jù)源控件傳遞過(guò)來(lái)的異常參數(shù)。AccessDataSource控件沒(méi)有關(guān)于這個(gè)參數(shù)的自己的名稱,所以只能使用名稱SqlDataSourceStatus- EventArguments。如果異常參數(shù)為空,那么表示什么事情都沒(méi)有發(fā)生。如果異常參數(shù)有一個(gè)值,那么將檢查這個(gè)值。如果參數(shù)是OLEDB Exception類型的,那么頁(yè)面上的警告標(biāo)簽的文本將會(huì)有提示信息。再次提醒您注意術(shù)語(yǔ)的使用。如果有一個(gè)AccessException類型,那將更明了,可惜實(shí)際上沒(méi)有這種類型??梢允褂酶悠胀ǖ腛leDbException對(duì)象并以處理異常的命令結(jié)束腳本。這樣將允許GridView繼續(xù)呈現(xiàn),雖然沒(méi)有數(shù)據(jù),并防止出現(xiàn)淺褐色背景的常規(guī)ASP.NET 2.0失敗頁(yè)面。因?yàn)镚ridView沒(méi)有得到任何數(shù)據(jù),所以它將會(huì)顯示一個(gè)替換表格,表格中只有一個(gè)在其EmptyDataText屬性中顯示消息的單元格。
如果您在進(jìn)行這些步驟中遇到困難,千萬(wàn)不要感到悲觀;下一個(gè)練習(xí)將會(huì)進(jìn)行示范。而現(xiàn)在,只需將代碼剪切并粘貼到頁(yè)面之中。在本書(shū)的后面,我將會(huì)討論如何創(chuàng)建一個(gè)用于連接失敗情況下的GridView的替換頁(yè)面以及處理錯(cuò)誤事件的詳細(xì)內(nèi)容。
試一試#4—— 處理AccessDataSource連接失敗
(1) 在ch02文件夾中,創(chuàng)建一個(gè)名為TIO-4-ConnectionFailure-CS.aspx的文件。在Design視圖中,添加一個(gè)指向Northwind 的AccessDataSource控件至頁(yè)面,該控件從表中選擇了所有列。
(2) 添加GridView用來(lái)顯示數(shù)據(jù)源控件中的信息。同樣,添加一個(gè)標(biāo)簽控件,并將其命名為“Message”。
(3) 現(xiàn)在切換至Source視圖并對(duì)標(biāo)記作一些修改,如下突出顯示代碼所示。如果其中有<columns>標(biāo)記部分,則將其刪除。留下的代碼應(yīng)當(dāng)如下所示:
<head id="Headl" runat="server">
<title>Chapter 2 TIO #4 Connection Failure to Access in C#</title>
</head>
<body>
<h3>Chapter 2 TIO #4 Connection Failure to Access in C#</h3>
<form id="forml" runat="server">
<asp:label ID="Message" runat="server"/><br/><br/>
<asp:gridview id="GridViewl" runat="server"
datasourceid="AccessDataSourcel"
AutoGenerateColumns="true"
EmptyDataText="No data records were returned" />
<asp:AccessDataSource ID="AccessDataSourcel" Runat="server"
selectcommand="Select * From Products"
datafile="~/App_Data/Northwind.mdb"
OnSelected="AccessDataSourcel_Selected"
/>
</form>
</body></html>
(4) 檢查頁(yè)面;在查看由Northwind售出的產(chǎn)品的時(shí)候,不應(yīng)該出現(xiàn)問(wèn)題。
(5) 現(xiàn)在將添加代碼來(lái)處理連接問(wèn)題了。轉(zhuǎn)到頁(yè)面的頂部并進(jìn)入如下腳本。第一個(gè)示例用C#編寫,第二個(gè)示例用VB編寫。進(jìn)入其中之一即可。
<script runat="server">
void AccessDataSourcel_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
if (e.Exception != null)
{
if(e.Exception.GetType()==typeof(System.Data.OleDb.OleDbException))
{
Message.Text = "There was a problem opening a connection to the
database. Please contact the system administrator for this site.";
//Optionally set GridViewl.Visible = false;
e.ExceptionHandled = true;
}
}
}
</script>
<html> ...
以下是用VB編寫的腳本。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtmlll/DTD/xhtmlll.dtd">
<script runat="server">
Sub AccessDataSourcel_Selected(ByVal sender As Object, ByVal e As
SqlDataSourceStatusEventArgs)
If (Not e.Exception Is Nothing) Then
If TypeOf e.Exception Is System.Data.OleDb.OleDbException Then
Message. Text = "There was a problem opening a connection to the database. Please contact the system administrator for this site."
' Optionally set GridViewl.Visible = false
e.ExceptionHandled = True
End If
End If
End Sub
</script>
<html> ...
(6) 保存并運(yùn)行頁(yè)面。因?yàn)槲覀儗?shí)際的連接還保持完好,所以現(xiàn)在還沒(méi)有任何問(wèn)題。關(guān)閉瀏覽器。
(7) 現(xiàn)在將Northwind的MDB文件從\App_Data移動(dòng)至C:\Temp文件夾中,這樣連接將會(huì)失敗?;蛘?,可以修改代碼來(lái)嘗試連接Southwind.mdb。運(yùn)行頁(yè)面并注意瀏覽器將顯示一個(gè)得體的失敗信息。
(8) 如果移動(dòng)了Northwind.mdb,那么將其再移動(dòng)回C:\BegAspNetDb\ App_ Data文件夾中。
示例說(shuō)明#4—— 處理AccessDataSource連接失敗
首先,請(qǐng)回想一下AccessDataSource控件是SqlDataSource的派生物,并且使用了應(yīng)用于OLEDB數(shù)據(jù)源的一系列異常,所以當(dāng)引用了帶有SQL或者OLEDB名稱而不是Access名稱的對(duì)象時(shí),請(qǐng)不要驚訝。
請(qǐng)觀察在頁(yè)面上進(jìn)行的處理連接失敗的三個(gè)修改。第一,添加了GridView數(shù)據(jù)源控件的一個(gè)屬性,該屬性在GridView沒(méi)有從數(shù)據(jù)源控件中獲得任何數(shù)據(jù)時(shí)將會(huì)顯示一條消息。第二,添加了數(shù)據(jù)源控件的一個(gè)屬性,該屬性在OnSelected事件發(fā)生時(shí)調(diào)用Data_Selected事件處理程序。請(qǐng)注意這處于DataSource事件中。雖然用戶沒(méi)有直接選擇 AccessDataSource控件(也沒(méi)有向用戶呈現(xiàn)),但是當(dāng)GridView向數(shù)據(jù)源控件請(qǐng)求數(shù)據(jù)時(shí),選擇還是在內(nèi)部發(fā)生了。第三,您編寫了這段腳本。
該腳本將會(huì)接收到幾個(gè)參數(shù),其中之一就是異常。這里沒(méi)有名為AccessDataSourceStatusEventArgs的對(duì)象。但是,可以獲得一個(gè)內(nèi)部派生出 Access- DataSource 的基本對(duì)象:SQL DataSource。SqlDataSource對(duì)象具有可以提交至AccessDataSource控件的狀態(tài)參數(shù)。如果沒(méi)有問(wèn)題,則異常列表為空。如果有一個(gè)異常,那么代碼將會(huì)進(jìn)行測(cè)試來(lái)查看拋出的異常是什么類型。同樣地,也沒(méi)有像Access Exception一樣的對(duì)象。但是,AccessDataSource將異常放入更加普通的稱為OleDb Exception的對(duì)象中。假定在這個(gè)集合中的所有異常都是由連接失敗造成的。我們的代碼將作出反應(yīng),反饋一些友好的失敗通告到名為Message的標(biāo)簽上。
這段代碼中的最大的竅門就是始終讓對(duì)象使用了三個(gè)不同的名稱。使用了一個(gè)Access文件(MDB)作為數(shù)據(jù)源并使用AccessDataSource控件。但是使用了底層的SqlDataSource作為事件參數(shù)。最后,使用了普通的OLEDB異常集。很多錯(cuò)誤都源于在所有的情況下都使用名為Access的ASP.NET 2.0對(duì)象。
- asp.net程序優(yōu)化 盡量減少數(shù)據(jù)庫(kù)連接操作
- asp.NET連接數(shù)的設(shè)置方法
- ASP.NET 6種常用數(shù)據(jù)庫(kù)的連接方法
- 在ASP.NET中連接SQL Server的簡(jiǎn)單方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- ASP.NET 連接ACCESS數(shù)據(jù)庫(kù)的簡(jiǎn)單方法
- ASP.NET連接SQL數(shù)據(jù)庫(kù)的簡(jiǎn)單實(shí)例代碼
- ASP.NET連接MySql數(shù)據(jù)庫(kù)的2個(gè)方法及示例
- ASP.NET連接sql2008數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼
- ASP.NET oledb連接Access數(shù)據(jù)庫(kù)的方法
- asp.net通過(guò)配置文件連接Access的方法
- asp.net快速連接access
相關(guān)文章
通過(guò)Web Service實(shí)現(xiàn)IP地址查詢功能的示例
下面小編就為大家分享一篇通過(guò)Web Service實(shí)現(xiàn)IP地址查詢功能的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12ASP.NET MVC中使用JavaScriptResult的用法示例
這篇文章主要介紹了ASP.NET MVC中使用JavaScriptResult的用法,結(jié)合實(shí)例形式分析了采用javascript動(dòng)態(tài)設(shè)置標(biāo)簽樣式以及使用MVC中的JavaScriptResult來(lái)實(shí)現(xiàn)同樣效果的相關(guān)技巧,需要的朋友可以參考下2016-08-08深入學(xué)習(xí).net驗(yàn)證碼生成及使用方法
這篇文章主要介紹了.net驗(yàn)證碼生成及使用方法,先了解驗(yàn)證碼是什么以及其作用,最后分享了如何制作驗(yàn)證碼,內(nèi)容很全面,感興趣的小伙伴們可以參考一下2015-11-11NLog路由規(guī)則和上下文信息知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給各位整理的是關(guān)于NLog路由規(guī)則和上下文信息的相關(guān)文章,有需要的朋友們學(xué)習(xí)下。2019-10-10ASP.NET實(shí)現(xiàn)的簡(jiǎn)單易用文件上傳類
這篇文章主要介紹了ASP.NET實(shí)現(xiàn)的簡(jiǎn)單易用文件上傳類,本文給出實(shí)現(xiàn)代碼和使用方法示例,需要的朋友可以參考下2015-06-06動(dòng)態(tài)代理的5模式使用示例和Mixin模式
什么叫"動(dòng)態(tài)代理",代理模式我們都知道,動(dòng)態(tài)代理就是動(dòng)態(tài)生成的代理(采用Emit)。5種代理模式:ClassProxy、ClassProxyWithTarget、InterfaceProxyWithoutTarget、InterfaceProxyWithTarget、InterfaceProxyWithTargetInterface、Mixin模式2013-11-11MVC4制作網(wǎng)站教程第二章 用戶注冊(cè)2.1
這篇文章主要為大家詳細(xì)介紹了MVC4制作網(wǎng)站教程,用戶注冊(cè)功能的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08