www.baike369.com
百科369 > ASP.NET教程 > ASP.NET在DataBound控件中处理SQL命令执行错误和异常

ASP.NET在DataBound控件中处理SQL命令执行错误和异常


ASP.NET在DataBound控件中处理SQL命令执行错误和异常

除了在SqlDataSource控件中处理错误和异常之外,也可以选择在DataBound控件中进行处理。GridView、DetailsView和FormView控件等都包含用于暴露Exception和ExceptionHandled属性的事件。


实例

在GridViewHandleError.aspx网页中,在尝试编辑DontExist数据库表的内容时,GridView控件就会处理引发的异常。程序代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridViewHandleError.aspx.cs" Inherits="GridViewHandleError" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
    protected void grdMovies_RowUpdated(object sender, GridViewUpdatedEventArgs e)
    {
        if (e.Exception != null)
        {
            lblError.Text = e.Exception.Message;
            e.ExceptionHandled = true;
        }
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <style type="text/css">
        .error
        {
            display:block;
            color:red;
            font:bold 16px 宋体;
            margin:10px;
        }
    </style>
    <title>ASP.NET在DataBound控件中处理SQL命令执行错误和异常-www.baike369.com</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:Label
        id="lblError"
        EnableViewState="false"
        CssClass="error"
        Runat="server">
    </asp:Label>
    <asp:GridView
        id="grdMovies"
        DataKeyNames="Id"
        AutoGenerateEditButton="true"
        DataSourceID="srcMovies"
        OnRowUpdated="grdMovies_RowUpdated"
        Runat="server">
    </asp:GridView>
    <asp:SqlDataSource
        id="srcMovies"
        SelectCommand="SELECT Id,Title FROM Movies"
        UpdateCommand="UPDATE DontExist SET Title=@Title WHERE Id=@ID"
        ConnectionString="<%$ ConnectionStrings:Movies %>"
        Runat="server">
    </asp:SqlDataSource>
    </div>
    </form>
</body>
</html>

执行结果如下:

ASP.NET在DataBound控件中处理SQL命令执行错误和异常的操作效果

打开GridViewHandleError.aspx页面后,点击任何一条记录左侧的“编辑”链接都可以编辑该记录。但是,点击“更新”链接,则会引发异常,因为update命令试图更新DontExist数据库表,但该表并不存在。

GridView控件使用RowUpdated事件处理程序处理这个异常。


提示

SqlDataSource控件和DataBound控件都可以处理异常。SqlDataSource控件的事件要先于与DataBound控件所对应的事件被触发。如果使用SqlDataSource控件的事件处理程序的ExceptionHandled属性处理异常,那么异常将不会再抛给DataBound控件的事件处理程序。

Copyright© 2011-2016 www.baike369.com All Rights Reserved