在讨论实际命令之前,我们需要了解的是AccessDataSource控件派生于SqlDataSource控件。在大多数情况下,这只是一个背景问题。但是当处理异常的时候,就必须使用实际上存在于(从而以之命名的)SQL数据源对象之中的对象。
软着陆的技术使用的代码将在AccessDataSource控件经历OnSelected event时被触发。当GridView从数据源控件请求数据时,这个事件将会在内部触发。 处理连接错误的代码就会检查到从数据源控件传递过来的异常参数。AccessDataSource控件没有关于这个参数的自己的名称,所以只能使用名称SqlDataSourceStatus- EventArguments。如果异常参数为空,那么表示什么事情都没有发生。如果异常参数有一个值,那么将检查这个值。如果参数是OLEDB Exception类型的,那么页面上的警告标签的文本将会有提示信息。再次提醒您注意术语的使用。如果有一个AccessException类型,那将更明了,可惜实际上没有这种类型。可以使用更加普通的OleDbException对象并以处理异常的命令结束脚本。这样将允许GridView继续呈现,虽然没有数据,并防止出现浅褐色背景的常规ASP.NET 2.0失败页面。因为GridView没有得到任何数据,所以它将会显示一个替换表格,表格中只有一个在其EmptyDataText属性中显示消息的单元格。
如果您在进行这些步骤中遇到困难,千万不要感到悲观;下一个练习将会进行示范。而现在,只需将代码剪切并粘贴到页面之中。在本书的后面,我将会讨论如何创建一个用于连接失败情况下的GridView的替换页面以及处理错误事件的详细内容。
试一试#4—— 处理AccessDataSource连接失败
(1) 在ch02文件夹中,创建一个名为TIO-4-ConnectionFailure-CS.aspx的文件。在Design视图中,添加一个指向Northwind 的AccessDataSource控件至页面,该控件从表中选择了所有列。
(2) 添加GridView用来显示数据源控件中的信息。同样,添加一个标签控件,并将其命名为“Message”。
(3) 现在切换至Source视图并对标记作一些修改,如下突出显示代码所示。如果其中有<columns>标记部分,则将其删除。留下的代码应当如下所示:
| <html> <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) 检查页面;在查看由Northwind售出的产品的时候,不应该出现问题。
(5) 现在将添加代码来处理连接问题了。转到页面的顶部并进入如下脚本。第一个示例用C#编写,第二个示例用VB编写。进入其中之一即可。
| <%@ page language="C#" %> <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编写的脚本。
共2页 第1页 第2页






