我有两种形式,即登录和主要表格。我希望在成功登录后,登录页面应该关闭,主窗体应该加载。但是我遇到的问题是每当我输入无效的用户名和密码时,主表单仍然显示出来。
我接受登录消息(登录成功或失败)作为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
但不幸的是,上述代码似乎都没有效果。我从其他人提出的问题中找到了上面的代码片段,但它们对我不起作用。
任何人都可以帮我纠正这个问题吗?
由于
答案 0 :(得分:0)
这是因为你做错了,
1。)这是Form1
的构造函数,每当创建表单时都会执行此代码,因此只要您显示FrmLogin
,就会显示Form1
表单
public Form1()
{
FrmLogin frm = new FrmLogin();
frm.ShowDialog();
InitializeComponent();
}
2。)这是Windows窗体应用程序的输入方法,当您按F5
运行项目时执行此操作,在此创建FrmLogin
并检查用户是否按下{ {1}}然后显示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
修改强>
如果您使用的是SQL Server 2008,则应使用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();
}
而不是System.Data.SqlClient
。
以下是更新后的代码:
System.Data.OleDb