【问题标题】:Try and Catch not working on SQL open commandTry and Catch 在 SQL open 命令上不起作用
【发布时间】:2013-04-19 18:04:40
【问题描述】:

我想通过使用 SQL 数据库连接检查身份验证来启动我的页面。这是我的代码,我不知道为什么它不起作用:

public partial class SiteMaster : System.Web.UI.MasterPage
{
  protected void Page_Load(object sender, EventArgs e)
  {
    // Try to open database.
    try
    {
        SqlConnection con = new SqlConnection();
        con.ConnectionString = WebConfigurationManager.ConnectionStrings["blahblah"].ConnectionString;
        con.Open();
        con.Close();
        //successful login, do nothing.
    }
    catch (Exception err) //if error Opening, catch the error, and display
    {
        SiteMasterMsg.Text = "Could not login in using ___.";
        SiteMasterMsg.Text += err.Message;
    }

问题是页面刚刚死掉,并给了我默认的 IIS 错误页面,显示数据库连接登录失败。我希望它会“尝试”连接,然后在登录尝试失败时,捕获错误,并显示错误的页面。我的 Default.aspx 页面上有这个:

<asp:Label id="SiteMasterMsg" runat="server" />

我不知道出了什么问题。我是否遗漏了什么,或者是否有更好的方法来做到这一点?

提前致谢!

【问题讨论】:

  • 你的连接字符串是什么? (用虚拟文本替换密码)
  • 为什么会出现通用错误页面?您正在捕获所有异常。您确定错误来自此代码吗?
  • @DourHighArch 这就是我一直在检查的方式:使用正确的密码,故意使用错误的密码,这会导致登录成功或失败,以及数据库连接。
  • 您可以使用调试器单步执行代码并确保这实际上是崩溃的地方吗? @usr 在这里是正确的,您显示的代码不会向您显示通用错误页面。
  • @usr,错误来自 con.Open();线里面试试。我很困惑为什么它不只是“尝试” con.Open(),并且在失败时“捕捉”错误。

标签: asp.net sql try-catch


【解决方案1】:

我意识到问题是因为这段代码在我的 Site.Master.cs 页面上,所以页面永远不会真正完全开发,它会在某种程度的错误处停止,这就是我所看到的。解决方案是制作一个专用的 Login.aspx 页面,而不是将这段代码放在 Site.Master.cs 页面中。

【讨论】:

    猜你喜欢
    • 2019-06-27
    • 1970-01-01
    • 2020-01-21
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    相关资源
    最近更新 更多