成功登录后C#加载主窗体

时间:2014-10-07 05:52:43

标签: c# sql-server-2008

我有两种形式,即登录和主要表格。我希望在成功登录后,登录页面应该关闭,主窗体应该加载。但是我遇到的问题是每当我输入无效的用户名和密码时,主表单仍然显示出来。

我接受登录消息(登录成功或失败)作为SQL Server 2008数据库中的字符串

我尝试使用以下代码

  1. 代码:

    public Form1()
    {
         FrmLogin frm = new FrmLogin();
         frm.ShowDialog();
         InitializeComponent();
    
    }
    
  2. 代码:

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        FrmLogin frm = new FrmLogin();
        if (frm.ShowDialog() == DialogResult.OK)
        {
            Application.Run(new Form1());
        }
        else
        {
            Application.Exit();
        }
    }    
    
  3. 登录表单按钮代码:

    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 个答案:

答案 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