在我的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/