【问题标题】:C# - show error window instead of interruption by exceptionC# - 显示错误窗口而不是异常中断
【发布时间】:2013-04-22 16:13:38
【问题描述】:

所以我试图将这两个查询包含在try - catch 中,因此如果用户名/密码不存在,则捕获异常并且只显示错误消息窗口,而不是破坏整个应用程序:

try
{
   command.CommandText = "SELECT username FROM users WHERE username='" + username + "'";
   reader = command.ExecuteReader();
   reader.Read();
   string myUsername = reader.GetString(0);
   values[0] = myUsername;

   command.CommandText = "SELECT password FROM users WHERE username='" + username + "'";
   reader = command.ExecuteReader();
   reader.Read();
   string myPassword = reader.GetString(0);
   values[1] = myPassword;
}
catch (Exception)
{
   MessageBox.Show("Wrong username or password!");
}

我知道检查正确用户名的逻辑,并且它的特定密码不正确,但我稍后会修复它。我现在只想知道如何显示消息而不是破坏整个过程。

【问题讨论】:

  • 你当前的代码有什么问题
  • 它不工作...我认为它应该工作
  • 目前您正在使用用户名作为密码。

标签: c# .net sql


【解决方案1】:

首先,不要将文本直接嵌入到您的 SQL 命令中,否则您将面临 SQL 注入攻击。
其次,您可能不需要两个查询;第一个实际上只是检查用户名的存在。使用类似的东西

select password from users where username = @username

(并使用参数提供用户名)

然后,与其依靠异常来捕获错误登录,不如检查Read() 调用的结果; false 应该表示没有行(因此没有匹配的用户名/密码组合)。

【讨论】:

    【解决方案2】:

    要回答您的实际问题,将代码放入try catch 块中会按照您的意愿进行,也就是说它会捕获错误并执行catch 中的代码块。

    我希望您的困惑在于,在 Visual Studio 的调试模式下运行代码时,调试器无论如何都会停止错误以向您突出显示错误。从可执行文件运行代码时不会发生这种情况。

    让您的程序在不因错误而停止的情况下运行代码(顺便说一句,我并不是说这是个好主意)

    • 单击 Visual Studio 顶部的“调试”菜单
    • 选择“例外”
    • 取消选中“用户处理的”“公共语言运行时异常”复选框。

    这应该会抑制错误以模拟从可执行文件运行,并且您应该会看到您的消息框。

    【讨论】:

      【解决方案3】:

      如果我理解正确,您可以通过将 catch 更改为以下内容来显示异常消息:

      catch (Exception ex)
      {
         MessageBox.Show("The Exception Message: " + ex.Message);
      }
      

      但是,您可能不想显示原始消息。我建议显示一条您可以控制的消息:

      catch (Exception ex)
      {
         // log the exception
         // Logger.Log(ex);
      
         MessageBox.Show("Couldn't find username: " + username);
      }
      

      旁注:use parameterized queries!

      【讨论】:

        猜你喜欢
        • 2023-03-12
        • 2014-01-21
        • 2011-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多