gpt4 book ai didi

C# 异常处理不适用于 ObjectDataSource

转载 作者:行者123 更新时间:2023-12-03 08:50:26 26 4
gpt4 key购买 nike

在我的 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 block ,例如:
try
{
//SQL work happens here
}
catch (Exception e)
{
//It sends me an email here
}

问题是,当我的 SQL 语句出现错误并且它位于 catch block 中时,错误会占据屏幕。我宁愿错误在我的标签 lbLinksErrorBox 中显示为红色文本,以便用户知道问题但可以继续工作。

似乎从未达到过 onDeleted 错误处理。错误在 try/catch block 处结束,并且永远不会出现在我的代码隐藏中的 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 连接中获取错误以不接管整个页面,而是显示在我网页上的标签中?

最佳答案

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

使用捕获中的异常信息设置标签。

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

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com