C# 显示不需要的结果的MessageBox

C# 显示不需要的结果的MessageBox,c#,messagebox,C#,Messagebox,我对开发软件这一行还不熟悉。所以这听起来可能很傻 我在大学里正在研究开发一个简单的登录系统,我想加快一点速度,我的教授可能有点杂乱无章,这会占用我们学习编程知识的时间 我可以让程序运行,只有在用户名和密码有效的情况下才能打开主窗体 在我研究并制作将数据写入数据库的注册按钮之前,消息框工作正常 但现在,我似乎无法让消息框显示是否成功登录 登录按钮的代码如下所示: private void VLogin_Click(object sender, EventArgs e) { try

我对开发软件这一行还不熟悉。所以这听起来可能很傻

我在大学里正在研究开发一个简单的登录系统,我想加快一点速度,我的教授可能有点杂乱无章,这会占用我们学习编程知识的时间

我可以让程序运行,只有在用户名和密码有效的情况下才能打开主窗体

在我研究并制作将数据写入数据库的注册按钮之前,消息框工作正常

但现在,我似乎无法让消息框显示是否成功登录

登录按钮的代码如下所示:

private void VLogin_Click(object sender, EventArgs e)
{

    try
    {
        string ConnectionString = "User ID=*****;Password=*******;" +
                "Database=C:\\Users\\marqu_000\\Documents\\WindowsFormsApplication13\\Sistema.GDB;" +
                "DataSource=localhost";
        FbConnection addDetailsConnection = new FbConnection(ConnectionString);
        addDetailsConnection.Open();
        string SQLCommandText = "select * from LOGIN where USERNAME=@username and PASSWORD=@password";
        FbCommand addDetailsCommand = new FbCommand(SQLCommandText, addDetailsConnection);
        addDetailsCommand.Parameters.Add("@username", FbDbType.VarChar, 15).Value = userName.Text;
        addDetailsCommand.Parameters.Add("@password", FbDbType.VarChar, 15).Value = userPassword.Text;
        FbDataReader reader = addDetailsCommand.ExecuteReader();

        while (reader.Read())
        {   
            this.Visible = false;
            MainWin MWin = new MainWin();
            MWin.ShowDialog();
            Application.Exit();
        }

        MessageBox.Show("Login Successful");
    }
    catch (Exception x)
    {
        MessageBox.Show("Invalid username or password");
        MessageBox.Show(x.Message);
    }
}
这是我的注册按钮代码:

private void registerUser_Click(object sender, EventArgs e)
{

    try
    {
        string ConnectionString = "User ID=****;Password=****;" +
                                     "Database=C:\\Users\\marqu_000\\Documents\\WindowsFormsApplication13\\Sistema.GDB;" +
                                      "DataSource=localhost";
        FbConnection addDetailsConnection = new FbConnection(ConnectionString);
        addDetailsConnection.Open();
        FbCommand SQLCommandTextInsert = new FbCommand("INSERT INTO LOGIN(USERNAME, PASSWORD, LEVEL) VALUES (@username,@password,@level)", addDetailsConnection);
        SQLCommandTextInsert.Parameters.AddWithValue("username", registerUsername.Text);
        SQLCommandTextInsert.Parameters.AddWithValue("password", registerPassword.Text);
        SQLCommandTextInsert.Parameters.AddWithValue("level", registerLevel.Text);
        SQLCommandTextInsert.ExecuteNonQuery();

        MessageBox.Show("Registration completed!");
    }
    catch (FbException fbex)
    {
        //throw fbex;
        MessageBox.Show("Invalid information, please verify!");
        MessageBox.Show(fbex.Message);
    }
}
如果那里有什么无用的线条,以及制作这些东西的最简单方法,我想知道。 我提前感谢大家的帮助。
Marco.

ShowDialog
是一个阻塞调用,这意味着在该调用完成之前不会运行任何代码。在这种情况下,当您的MWin关闭时。在调用ShowDialog或从MWin调用它之前,需要显示成功消息

只有在发生异常时,才会显示登录失败消息。我认为如果我正确地阅读了您的代码,如果阅读器没有返回任何结果(登录失败),那么您将显示“登录成功”,然后不执行其他操作

您可以使用
if
来确定数据库返回的结果和登录失败是否是您的
else
条件。

我终于成功了! 我搜索了如何使用IF进行验证,并且可以这样做。我的代码现在是这样的:

try
        {
            string ConnectionString = "User ID=*****;Password=*******;" +
                "Database=C:\\Users\\marqu_000\\Documents\\WindowsFormsApplication13\\Sistema.GDB;" +
                "DataSource=localhost";
            FbConnection addDetailsConnection = new FbConnection(ConnectionString);
            addDetailsConnection.Open();
            string SQLCommandText = "select * from LOGIN where USERNAME=@username and PASSWORD=@password";
            FbCommand addDetailsCommand = new FbCommand(SQLCommandText, addDetailsConnection);
            addDetailsCommand.Parameters.Add("@username", FbDbType.VarChar, 15).Value = userName.Text;
            addDetailsCommand.Parameters.Add("@password", FbDbType.VarChar, 15).Value = userPassword.Text;
            FbDataReader reader = addDetailsCommand.ExecuteReader();
            if (reader.Read())
            {
                this.Visible = false;
                MessageBox.Show("Login Successful!");
                MainWin MWin = new MainWin();
                MWin.ShowDialog();
            }
            else
            {
                MessageBox.Show("Invalid username or password!");
            }

欢迎来到SO。我已编辑您的问题,以从连接字符串中删除用户名和密码。请不要在以后的问题中包含类似的项目。哪个消息框不会显示?是在
ShowDialog
阻塞调用和
应用程序退出后的一个吗?使用异常作为控制程序流的一种方式并不是一种很好的方法。请在
VLogin\u方法的开头放置一个断点,单击
方法,然后单击F5。您可以一步一步地浏览代码,看看到底发生了什么
在与读卡器的循环中,因此如果数据库返回了匹配项,则退出程序。这是你的意图吗?@Tim-如果这确实是我认为的“错误”消息框,那么我认为它只需要在
ShowDialog
之前,我猜
MainWin
只是他想在成功登录后打开的窗口,当它关闭时,然后就可以关闭程序了。我照你说的做了,把“MessageBox”移到了“ShowDialog”之前。你愿意举一个if的例子吗?