C# 登录时按条件停止?

C# 登录时按条件停止?,c#,.net,winforms,if-statement,C#,.net,Winforms,If Statement,我是C#的新手,所以我的问题是登录表单 如果每次我点击提交按钮时,我的用户类不是“admin”,它会将我带回登录表单。所以当条件不成立时,我的陈述就停止了。这是我的密码 --------编辑 很抱歉我的新手限制 以下是我所拥有的: 具有用户名和角色的sql表 根据用户的角色,用户将加载不同的表单 // Compare strings private bool CompareStrings(string string1, string string2) { return

我是C#的新手,所以我的问题是登录表单

如果每次我点击提交按钮时,我的用户类不是“admin”,它会将我带回登录表单。所以当条件不成立时,我的陈述就停止了。这是我的密码

--------编辑 很抱歉我的新手限制 以下是我所拥有的: 具有用户名和角色的sql表 根据用户的角色,用户将加载不同的表单

// Compare strings
 private bool CompareStrings(string string1, string string2)
    {
        return String.Compare(string1, string2, true, System.Globalization.CultureInfo.InvariantCulture) == 0 ? true : false;
    }




// button on Login form    
public void button1_Click(object sender, EventArgs e)
    {
        try
        {
            SqlConnection UGIcon = new SqlConnection();
            UGIcon.ConnectionString = "Data Source=BVSQL; Initial Catalog=BV1;user id=jose; password=jones6;";

            UGIcon.Open();
            SqlCommand cmd = new SqlCommand("SELECT ISNULL(bvuser, '') AS stUsername, ISNULL(bvpassword,'') AS stPassword, ISNULL(bvclass, '') AS stRole FROM BVusertable WHERE bvuser='" + textBox1.Text + "' and bvpassword='" + textBox2.Text + "'", UGIcon);
            SqlDataReader dr = cmd.ExecuteReader();

            string userText = textBox1.Text;
            string passText = textBox2.Text;
            //string stRole = "admin";

            dr.Read();
            {
                if
                   (this.CompareStrings(dr["stUsername"].ToString(), userText) &&
                    this.CompareStrings(dr["stPassword"].ToString(), passText)
                    )
                {
                    if (this.CompareStrings(dr["stRole"].ToString(), "admin"))
                    {
                        this.DialogResult = DialogResult.OK;
                    }
                    else if (this.CompareStrings(dr["stRole"].ToString(), "user"))
                    {
                        this.DialogResult = DialogResult.No;
                    }
                }
                else
                {
                    //MessageBox.Show("Error");
                }
            }
            dr.Close();
            UGIcon.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Login Falied");
        }
    }
这里是Programs.cs

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace BV_SOFT
{
static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Loginf fLogin = new Loginf();
        if (fLogin.ShowDialog() == DialogResult.OK)
        {
            Application.Run(new Home2());
        }
        else
        if (fLogin.ShowDialog() == DialogResult.No)
        {
            Application.Run(new Home3());
        }
        else
        {
            Application.Exit();
        }
使用系统;
使用System.Collections.Generic;
使用System.Windows.Forms;
命名空间BV_SOFT
{
静态类程序
{
/// 
///应用程序的主要入口点。
/// 
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Loginf fLogin=new Loginf();
if(fLogin.ShowDialog()==DialogResult.OK)
{
Application.Run(newhome2());
}
其他的
if(fLogin.ShowDialog()==DialogResult.No)
{
Application.Run(newhome3());
}
其他的
{
Application.Exit();
}

只有当用户具有“管理员”角色时,才可以将
对话框result
设置为
OK

在所有其他情况下,除了角色为“用户”时,您将保留未设置的结果。这将意味着表单不会被取消


在不知道您的逻辑是什么的情况下,我无法建议它应该是什么。

您调用ShowDialog两次。请尝试以下操作:

Loginf fLogin = new Loginf();
DialogResult result = fLogin.ShowDialog();
if (result == DialogResult.OK)
{
    Application.Run(new Home2());
}
else if (result == DialogResult.No)
{
    Application.Run(new Home3());
}
else
{
    Application.Exit();
}

调用
ShowDialog
两次将显示表单两次。使用此选项将仅显示表单一次。在代码中,如果角色不是“admin”然后执行else块,它再次调用
ShowDialog
,这将再次显示表单,这不是您想要的。显示表单一次,存储结果,并检查存储的结果。

此方法中的
内容是什么。CompareStrings
方法?为什么不直接执行
=
而不是调用该方法?@sparky68967-它可能会进行不区分大小写的比较(例如).@ChrisF这对用户名来说可能没问题,但我不建议对密码这样做。String.compare有一个选项-无需重新发明轮子。@sparky68967-是的。我错过了这个用法。但是,我认为这与这个问题无关。谢谢你,先生,这项工作完成了。