C#在成功登录后加载主窗体
本文关键字:加载 窗体 登录 成功 | 更新日期: 2023-09-27 18:25:42
我有两个表单,即登录和主表单。我希望在成功登录后,关闭登录页面并加载主表单。但我面临的问题是,每当我输入无效的用户名和密码时,主表单仍然会出现。
我正在接受SQL Server 2008数据库中的登录消息(登录成功或失败)作为字符串
我尝试使用以下代码
-
代码:
public Form1() { FrmLogin frm = new FrmLogin(); frm.ShowDialog(); InitializeComponent(); }
-
代码:
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); FrmLogin frm = new FrmLogin(); if (frm.ShowDialog() == DialogResult.OK) { Application.Run(new Form1()); } else { Application.Exit(); } }
登录表单按钮代码:
private void button1_Click(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection("File Name=E:''Vivek''License Manager''License Manager''login.udl");
try
{
conn.Open();
OleDbCommand cmd = new OleDbCommand("checkuser",conn);
cmd.CommandType = CommandType.StoredProcedure;
OleDbParameter p1=new OleDbParameter("userid",username.Text);
OleDbParameter p2 = new OleDbParameter("password",password.Text);
cmd.Parameters.Add(p1);
cmd.Parameters.Add(p2);
var returnParameter = cmd.Parameters.Add("@ReturnVal",OleDbType.VarChar,50);
returnParameter.Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
// Retrieve the return value
string result = returnParameter.Value.ToString();
MessageBox.Show(result);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
conn.Close();
}
存储过程
ALTER proc [dbo].[usercheck]
(@userid varchar(20),
@password varchar(20))
as
begin
if exists(select userid,password from users where userid=@userid and password=@password)
return 0
else
return 1
end
但不幸的是,上述代码似乎都不起作用。我在这里从其他人提出的问题中找到了上面的代码片段,但它们对我不起作用
有人能帮我纠正一下吗?
感谢
这是因为你做错了,
1.)这是Form1
的构造函数,每当创建表单时都会执行此代码,因此一旦显示Form1
,就会显示FrmLogin
表单。
public Form1()
{
FrmLogin frm = new FrmLogin();
frm.ShowDialog();
InitializeComponent();
}
2.)这是Windows窗体应用程序的输入方法,当您按F5
运行项目时会执行此方法。在这里,您正在创建FrmLogin
,只是检查用户是否按OK
然后显示Form1
。这是正确的轨道,但你可能没有检查任何凭据。。。
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
FrmLogin frm = new FrmLogin();
if (frm.ShowDialog() == DialogResult.OK)
{
Application.Run(new Form1());
}
else
{
Application.Exit();
}
试试这个:
您的Program.cs
:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
LogonForm form = new LogonForm();
if (form.ShowDialog() != DialogResult.OK)
{
//Handle authentication failures as necessary, for example:
Application.Exit();
}
else
{
Application.Run(new Form2());
}
}
您的LogonForm
:
private void Login()
{
if (CheckCredentials())
{
this.DialogResult = DialogResult.OK;
}
else
{
MessageBox.Show("Please enter correct credentials and try again!");
}
}
private void BtnLogin_Click(object sender, EventArgs e)
{
Login();
}
编辑:
如果您使用的是SQL Server 2008,则应该使用System.Data.SqlClient
而不是System.Data.OleDb
。
这是更新后的代码:
private bool CheckCredentials()
{
bool result = false;
using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand("usercheck", conn))
{
conn.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@userid", username.Text);
cmd.Parameters.Add("@password", username.Text);
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.HasRows)
{
reader.Read();
result = reader.GetBoolean(0);
}
}
}
return result;
}