c# - C# 登录表单 - 设置全局变量在整个程序中可用
问题描述
好的,所以我的背景是 VBA-Msaccess(SQL Server 后端)。已经开发了大约6年。我们公司最近受到 MsAccess 限制的严重打击,因此决定开始使用 C# 开发并集成到我们现有的后端。
我可以很容易地解决这个问题,但我只想确保我以最理想的方式解决它。
所以我有一个登录表单(Win forms),它将用户名和密码传递给登录类。然后登录类将信息与 SQL Server 中的数据进行比较,并根据是否找到匹配记录返回真或假值。在类中,我设置了属性以包含有关用户的信息,即他们的权限级别。
我遇到的问题是,虽然这很好用,因为我正在从 login.cs 实例化一个对象,但这些权限级别仅包含在创建的对象中,并且在登录页面后无法访问。据推测,我需要将此权限信息存储在静态或全局变量中,但我只想知道最优化和格式正确的方法!
C# 登录表单
public partial class frmLogin : Form
{
public frmLogin()
{
InitializeComponent();
}
private void btnLogin_Click(object sender, EventArgs e)
{
string userName = txtUsername.Text;
string passWord = txtPassword.Text;
Login login = new Login("","");
string user = txtUsername.Text;
string pass = txtPassword.Text;
if (login.IsLoggedIn(user, pass))
{
MessageBox.Show(login.adminUser.ToString());
frmMainMenu form = new frmMainMenu();
this.Hide();
form.ShowDialog();
}
else
{
MessageBox.Show("Log in failed please try again!");
}
}
}
登录.cs
public class Login
{
public string UserName { get; set; }
public string PassWord { get; set; }
private bool aUser;
private bool tLeader;
public bool adminUser
{
get
{
return aUser;
}
set
{
aUser = value;
}
}
public bool teamLeader
{
get
{
return tLeader;
}
set
{
tLeader = value;
}
}
public Login(string user, string pass)
{
this.UserName = user;
this.PassWord = pass;
}
private void ClearText(string user, string pass)
{
user = string.Empty;
pass = string.Empty;
}
public bool IsLoggedIn(string user, string pass)
{
if (string.IsNullOrEmpty(user))
{
MessageBox.Show("Enter the user name!");
return false;
}
else
{
ConnectionStrings connstring = new ConnectionStrings();
SqlConnection sqlConn = new SqlConnection(connstring.connNameUser);
sqlConn.Open();
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.Connection = sqlConn;
sqlCmd.CommandType = System.Data.CommandType.Text;
sqlCmd.CommandText = "SELECT username, password, door_order_admin, super_user from dbo.[user] WHERE username = @user and password = @pass";
sqlCmd.Parameters.AddWithValue("@user", user);
sqlCmd.Parameters.AddWithValue("@pass", pass);
SqlDataReader reader = sqlCmd.ExecuteReader();
if (reader.Read())
{
if (Convert.ToInt16(reader["door_order_admin"]) == 1)
{
aUser = true;
}
else
{
aUser = false;
}
if (Convert.ToInt16(reader["super_user"]) == 1)
{
tLeader = true;
}
else
{
tLeader = false;
}
return true;
}
else
{
ClearText(user, pass);
return false;
}
}
}
}
任何帮助我指出正确方向的帮助都将不胜感激。就像我说的,我想确保我从正确的角度开始,而不是编写一堆代码只是为了进一步意识到我本可以做得更好。
提前致谢!
解决方案
推荐阅读
- python - Python连接字典键
- kubernetes - OpenFaaS:在功能 Pod 的健康检查期间接收超时错误
- amazon-s3 - 使用 Apache Camel Source 从 S3 到 Kafka
- typescript - 使用带有泛型函数的 redux saga
- sql-server - 构建时:包含 sqlproj 的 DACPAC 作为 csproj 的一部分
- flutter - 每次我将元素添加到 GridView 时,这都会发生在它的最后,我可以自己设置容器的高度,但它不起作用
- xml - PowerShell:无法将值“System.Object[]”转换为类型“System.Xml.XmlDocument”
- javascript - 如何在没有任何损坏的情况下将“ğ”填充到文本中?
- r - 在ggplot中,如何将轴刻度标签映射到标签的指定数据列?
- slack - 是否可以为 Slack 定制 ServiceNow?