ASP.NET编程:ASP.NET数据库编程之Access毗连失利
java的设计机制:首先产生一个中间码,第二部编译为本地(机器)码。这个机制有很大的缺点。access|asp.net|编程|数据|数据库 毛病和失利总会不成制止地在使用程序中呈现。假如有人在MDB目次之上又增加了一级新的文件夹而“更新”了服务器的目次树,那末将会产生甚么?假如MDB称号被变动了会如何?假如MDB文件被破坏又该怎样呢?以上每个成绩都将制止对数据的乐成毗连并招致一个失利页面。好的编程理论标明必要尽量当心地看待任何失利。在会商实践命令之前,我们必要懂得的是AccessDataSource控件派生于SqlDataSource控件。在年夜多半情形下,这只是一个背景成绩。可是当处置非常的时分,就必需利用实践上存在于(从而以之定名的)SQL数据源工具当中的工具。
软着陆的手艺利用的代码将在AccessDataSource控件履历OnSelectedevent时被触发。当GridView从数据源控件哀求数据时,这个事务将会在外部触发。处置毗连毛病的代码就会反省到从数据源控件传送过去的非常参数。AccessDataSource控件没有关于这个参数的本人的称号,以是只能利用称号SqlDataSourceStatus-EventArguments。假如非常参数为空,那末暗示甚么事变都没有产生。假如非常参数有一个值,那末将反省这个值。假如参数是OLEDBException范例的,那末页面上的告诫标签的文本将会有提醒信息。再次提示您注重术语的利用。假如有一个AccessException范例,那将更了然,惋惜实践上没有这类范例。可使用加倍一般的OleDbException工具并以处置非常的命令停止剧本。如许将同意GridView持续出现,固然没无数据,并避免呈现浅褐色背景的惯例ASP.NET2.0失利页面。由于GridView没有失掉任何数据,以是它将会显现一个交换表格,表格中只要一个在其EmptyDataText属性中显现动静的单位格。
假如您在举行这些步骤中碰到坚苦,万万不要感应失望;下一个实习将会举行树模。而如今,只需将代码剪切并粘贴到页面当中。在本书的前面,我将会会商怎样创立一个用于毗连失利情形下的GridView的交换页面和处置毛病事务的具体内容。
试一试#4――处置AccessDataSource毗连失利
(1)在ch02文件夹中,创立一个名为TIO-4-ConnectionFailure-CS.aspx的文件。在Design视图中,增加一个指向Northwind的AccessDataSource控件至页面,该控件从表当选择了一切列。
(2)增加GridView用来显现数据源控件中的信息。一样,增加一个标签控件,并将其定名为“Message”。
(3)如今切换至Source视图并对标志作一些修正,以下凸起显现代码所示。假如个中有<columns>标志部分,则将其删除。留下的代码应该以下所示:
<html>
<headid="Headl"runat="server">
<title>Chapter2TIO#4ConnectionFailuretoAccessinC#</title>
</head>
<body>
<h3>Chapter2TIO#4ConnectionFailuretoAccessinC#</h3>
<formid="forml"runat="server">
<asp:labelID="Message"runat="server"/><br/><br/>
<asp:gridviewid="GridViewl"runat="server"
datasourceid="AccessDataSourcel"
AutoGenerateColumns="true"
EmptyDataText="Nodatarecordswerereturned"/>
<asp:AccessDataSourceID="AccessDataSourcel"Runat="server"
selectcommand="Select*FromProducts"
datafile="~/App_Data/Northwind.mdb"
OnSelected="AccessDataSourcel_Selected"
/>
</form>
</body></html>
(4)反省页面;在检察由Northwind售出的产物的时分,不该该呈现成绩。
(5)如今将增加代码来处置毗连成绩了。转到页面的顶部并进进以下剧本。第一个示例用C#编写,第二个示例用VB编写。进进个中之一便可。
<%@pagelanguage="C#"%>
<scriptrunat="server">
voidAccessDataSourcel_Selected(objectsender,SqlDataSourceStatusEventArgse)
{
if(e.Exception!=null)
{
if(e.Exception.GetType()==typeof(System.Data.OleDb.OleDbException))
{
Message.Text="Therewasaproblemopeningaconnectiontothe
database.Pleasecontactthesystemadministratorforthissite.";
//OptionallysetGridViewl.Visible=false;
e.ExceptionHandled=true;
}
}
}
</script>
<html>...
以下是用VB编写的剧本。
<%@PageLanguage="VB"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.1//EN"
"http://www.w3.org/TR/xhtmlll/DTD/xhtmlll.dtd">
<scriptrunat="server">
SubAccessDataSourcel_Selected(ByValsenderAsObject,ByValeAs
SqlDataSourceStatusEventArgs)
If(Note.ExceptionIsNothing)Then
IfTypeOfe.ExceptionIsSystem.Data.OleDb.OleDbExceptionThen
Message.Text="Therewasaproblemopeningaconnectiontothedatabase.Pleasecontactthesystemadministratorforthissite."
OptionallysetGridViewl.Visible=false
e.ExceptionHandled=True
EndIf
EndIf
EndSub
</script>
<html>...
(6)保留并运转页面。由于我们实践的毗连还坚持无缺,以是如今还没有任何成绩。封闭扫瞄器。
(7)如今将Northwind的MDB文件从App_Data挪动至C:Temp文件夹中,如许毗连将会失利。大概,能够修正代码来实验毗连Southwind.mdb。运转页面并注重扫瞄器将显现一个得体的失利信息。
(8)假如挪动了Northwind.mdb,那末将其再挪动回C:BegAspNetDbApp_Data文件夹中。
示例申明#4――处置AccessDataSource毗连失利
起首,请回忆一下AccessDataSource控件是SqlDataSource的派生物,而且利用了使用于OLEDB数据源的一系列非常,以是当援用了带有SQL大概OLEDB称号而不是Access称号的工具时,请不要惊奇。
请察看在页面长进行的处置毗连失利的三个修正。第一,增加了GridView数据源控件的一个属性,该属性在GridView没有从数据源控件中取得任何数据时将会显现一条动静。第二,增加了数据源控件的一个属性,该属性在OnSelected事务产生时挪用Data_Selected事务处置程序。请注重这处于DataSource事务中。固然用户没有间接选择AccessDataSource控件(也没有向用户出现),可是当GridView向数据源控件哀求数据时,选择仍是在外部产生了。第三,您编写了这段剧本。
该剧本将会吸收到几个参数,个中之一就是非常。这里没着名为AccessDataSourceStatusEventArgs的工具。可是,能够取得一个外部派生出Access-DataSource的基础工具:SQLDataSource。SqlDataSource工具具有能够提交至AccessDataSource控件的形态参数。假如没有成绩,则非常列表为空。假如有一个非常,那末代码将会举行测试来检察抛出的非常是甚么范例。一样地,也没有像AccessException一样的工具。可是,AccessDataSource将非常放进加倍一般的称为OleDbException的工具中。假定在这个汇合中的一切非常都是由毗连失利酿成的。我们的代码将作出反响,反应一些友爱的失利公告到名为Message的标签上。
这段代码中的最年夜的秘诀就是一直让工具利用了三个分歧的称号。利用了一个Access文件(MDB)作为数据源并利用AccessDataSource控件。可是利用了底层的SqlDataSource作为事务参数。最初,利用了一般的OLEDB非常集。良多毛病都源于在一切的情形下都利用名为Access的ASP.NET2.0工具。以前很热炒跨平台,主要是由于硅谷挑战微软霸主地位的热情,但是冷静下来后,跨平台往往不是那么一回事。假设你有个软件,所谓的跨平台,你只需要为第二个平台上重新编译一次就行了,这样很难么? ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。 微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。 但是目前在CGI中使用的最为广泛的是Perl语言。所以,狭义上所指的CGI程序一般都是指Perl程序,一般CGI程序的后缀都是.pl或者.cgi。 我的意思是.net好用,从功能上来说比JAVA强还是很明显的。 由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。 最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。 但是目前在CGI中使用的最为广泛的是Perl语言。所以,狭义上所指的CGI程序一般都是指Perl程序,一般CGI程序的后缀都是.pl或者.cgi。 碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。
页:
[1]