在我的C#.NET Web应用程序上,我有一个绑定(bind)到ObjectDataSource的GridView。此ObjectDataSource使用来自我的App_Code文件夹中的.cs文件的选择,更新,插入,删除命令方法。同样在ObjectDataSource上,我还设置了OnDeleted,OnUpdated等以指向代码中的一个函数,该函数试图使用错误消息更新标签,以便用户知道数据库命令不起作用:

protected void odsLinks_DBAction(object sender, ObjectDataSourceStatusEventArgs e)
    {
        lbLinksErrorBox.Text = "";
        if (e.Exception != null)
        {
            lbLinksErrorBox.Text = "There was a problem.<br>" + e.Exception.InnerException.Message.ToString();
            lbLinksErrorBox.ForeColor = System.Drawing.Color.Red;
            //e.ExceptionHandled = true;
        }
    }

在实际执行数据库操作的地方,围绕它们设置了try/catch块,例如:
try
{
    //SQL work happens here
}
catch (Exception e)
{
    //It sends me an email here
}

问题是,当我的SQL语句中有错误并落在catch块中时,该错误将接管屏幕。我希望该错误以红色文本显示在我的标签lbLinksErrorBox中,以便用户知道问题所在但可以继续工作。

似乎从未实现过onDeleted错误处理。该错误在try/catch块结束,并且从未出现在我后面的代码中的onDeleted odsLinks_DBAction函数中。

这是我的.aspx页中的ObjectDataSource外观:
<asp:ObjectDataSource ID="odsLinks" runat="server" SelectMethod="GetLinks" TypeName="TaskDataAccess" DeleteMethod="DeleteLink" InsertMethod="AddLink" UpdateMethod="UpdateLink" OnDeleted="odsLinks_DBAction" OnInserted="odsLinks_DBAction" OnUpdated="odsLinks_DBAction">
        <DeleteParameters>
            <asp:Parameter Name="link_ID" Type="String" />
        </DeleteParameters>
        <InsertParameters>
            <asp:ControlParameter ControlID="hfTreeID" Name="tree_ID" PropertyName="Value" Type="String" />
            <asp:ControlParameter ControlID="hfTaskID" Name="task_ID" PropertyName="Value" Type="String" />
            <asp:Parameter Name="link_Title" Type="String" />
            <asp:Parameter Name="link_URL" Type="String" />
        </InsertParameters>
        <SelectParameters>
            <asp:ControlParameter ControlID="hfTreeID" Name="tree_ID" PropertyName="Value" Type="String" />
            <asp:ControlParameter ControlID="hfTaskID" Name="task_ID" PropertyName="Value" Type="String" />
        </SelectParameters>
        <UpdateParameters>
            <asp:Parameter Name="link_ID" Type="String" />
            <asp:Parameter Name="link_Title" Type="String" />
            <asp:Parameter Name="link_URL" Type="String" />
        </UpdateParameters>
    </asp:ObjectDataSource>

这是如何设置App_Code .cs文件数据库连接的示例:
public static void DeleteLink(string link_ID)
{
    GetUserDateTime gudt = new GetUserDateTime();
    try
    {
        string dsn = ConfigurationManager.ConnectionStrings["myDatabaseHere"].ConnectionString;
        SqlConnection con = new SqlConnection(dsn);
        SqlCommand cmd = new SqlCommand("UPDATE [TreeLinks] SET Link_Deleted = 'YES' where Link_ID = @Link_ID", con);
        cmd.Parameters.AddWithValue("@Link_ID", link_ID);

        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
    }
    catch (Exception e)
    {
        string body = "Error on TaskDataAccess.DeleteLink() <br>" + gudt.user + "<br>" + e.ToString();
        SendEmail.sendEmail("Error on Task page", body);
    }
}

有想法吗?如何从SQL连接中获取错误,而不是接管整个页面,而是显示在网页的标签中?

最佳答案

您的事件将永远不会触发,因为在触发事件之前将引发异常。

在渔获物中设置带有异常信息的标签。

好的,自从我使用Web表单以来已经有一段时间了,但是如果在您的ods上使用IIRC,则需要在appcode事件完成时添加一个回调方法,例如。 OnUpdating =“MyObjectDataSource_Updated” ...

MyObjectDataSource_Updated方法应该在您的页面中而不是共享的cs文件中,因此它可以访问您的页面元素(标签等)。

关于c# - C#异常处理不适用于ObjectDataSource,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42447715/

10-10 18:37