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