C# 单击按钮时出现参数无效错误(C、VisualStudio、WinForms)

C# 单击按钮时出现参数无效错误(C、VisualStudio、WinForms),c#,visual-studio,winforms,visual-studio-2013,C#,Visual Studio,Winforms,Visual Studio 2013,我有一个登录表单,它指向一个主菜单表单。但是当我点击登录按钮时,我得到一个参数无效的错误。这之前没有出现,只是从昨晚开始的。这是我的登录和主菜单表单及其代码 登录: 代码: 主菜单: 代码: 顺便说一下,这幅画在一个画框里。谢谢你的帮助。即使您只是解释了参数无效的确切含义。根据我的测试,您的代码只适用于第一个用户名和密码。我们需要使用while语句在数据库中创建一个循环 我已经修改了你的代码,现在它运行良好 请检查以下代码 private void button1_Click(object s

我有一个登录表单,它指向一个主菜单表单。但是当我点击登录按钮时,我得到一个参数无效的错误。这之前没有出现,只是从昨晚开始的。这是我的登录和主菜单表单及其代码

登录:

代码:

主菜单:

代码:


顺便说一下,这幅画在一个画框里。谢谢你的帮助。即使您只是解释了参数无效的确切含义。

根据我的测试,您的代码只适用于第一个用户名和密码。我们需要使用while语句在数据库中创建一个循环

我已经修改了你的代码,现在它运行良好

请检查以下代码

 private void button1_Click(object sender, EventArgs e)
        {    
            string constr = @"";
            SqlConnection con = new SqlConnection(constr);
            try
            {
                con.Open();
                string sql = "SELECT * FROM Details where UserN=@UserN and PassW=@PassW";
                SqlParameter pUser = new SqlParameter("@UserN", txtUserName.Text);
                SqlParameter pPass = new SqlParameter("@PassW", txtPwd.Text);
                SqlCommand com = new SqlCommand(sql, con);
                com.Parameters.Add(pUser);
                com.Parameters.Add(pPass);
                SqlDataReader  dr = com.ExecuteReader();
                if(dr.Read())
                {
                    MainMenu MainMenu = new MainMenu();
                    this.Hide();
                    MainMenu.Show();
                }
                else
                {
                    MessageBox.Show("Username or Password is incorrect");
                    txtPwd.Text = "";
                    txtUserName.Text = "";
                    txtUserName.Focus();
                }
    
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();
            }
           
        }

海报在这里!事实证明,我一直犯这个错误的原因是因为我的图像太大了。对于任何可能最终阅读本文的初学者程序员:如果您遇到此错误,请查看您的图像详细信息。

旁注:您显然以明文形式存储密码。你不应该那样做。只存储其中的一些散列。查询中没有WHERE子句。这意味着您需要检查随机登录,而不一定是与用户输入的名称对应的登录。@stickybit密码的文本框具有密码字符*。我知道没有WHERE,但这是因为这个系统只供一台计算机中的一个用户使用,所以我认为它不需要WHERE,因为只有一条记录。我没有谈论文本框的回声,而是数据库中存储的密码。您可以使用调试器在代码中找到异常发生的确切位置。首先,在con.Open上设置断点;然后运行应用程序并逐步使用调试器,查看哪一行产生了错误。关于加密密码的观点也是有效的。看看盐散列法。
public partial class frmMainMenu : Form
    {
        SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=F:\DinerXP\DinerXP\Details.mdf;Integrated Security=True");
        SqlCommand com;

        //Globally creating objects from Forms Class to use in all Click events
        frmAbout About = new frmAbout();
        frmBank Bank = new frmBank();
        frmReservations Reservations = new frmReservations();
        frmOrders Orders = new frmOrders();
        frmEmployees Employees = new frmEmployees();
        frmInvMng Inventory = new frmInvMng();
        frmMenus Menus = new frmMenus();
        frmTodaysMenu TodaysMenu = new frmTodaysMenu();

        public frmMainMenu()
        {
            InitializeComponent();
        }


        //Close application on FormClosed

        private void frmMainMenu_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }


        //Change Header Label:

        private void frmMainMenu_Load(object sender, EventArgs e)
        {
            int income;

            con.Open();
            string sql = "select Name from Details";
            com = new SqlCommand(sql, con);
            SqlDataReader dr;
            dr = com.ExecuteReader();
            dr.Read();
            lblRestNa.Text = dr["Name"].ToString();
            con.Close();            
        }
          

        //Button-Click Events:

        private void btnReserv_Click(object sender, EventArgs e)
        {
            Reservations.Show();
            this.Hide();
        }

        private void btnTodaysMenu_Click(object sender, EventArgs e)
        {
            this.Hide();
            TodaysMenu.Show();
        }

        private void btnBank_Click(object sender, EventArgs e)
        {
            this.Hide();
            Bank.Show();
        }

        private void btnOrders_Click(object sender, EventArgs e)
        {
            this.Hide();
            Orders.Show();
        }

        private void btnEmployees_Click(object sender, EventArgs e)
        {
            this.Hide();
            Employees.Show();
        }

        private void btnInventory_Click(object sender, EventArgs e)
        {
            this.Hide();
            Inventory.Show();
        }

        private void btnMenus_Click(object sender, EventArgs e)
        {
            this.Hide();
            Menus.Show();
        }

        private void btnAbout_Click(object sender, EventArgs e)
        {
            this.Hide();
            About.Show();
        }


        //Picture click Events:

        private void picReserv_Click(object sender, EventArgs e)
        {
            this.Hide();
            Reservations.Show();
        }

        private void picTodaysMenu_Click(object sender, EventArgs e)
        {
            this.Hide();
            TodaysMenu.Show();
        }

        private void picBank_Click(object sender, EventArgs e)
        {
            this.Hide();
            Bank.Show();
        }

        private void picOrders_Click(object sender, EventArgs e)
        {
            this.Hide();
            Orders.Show();
        }

        private void picEmployees_Click(object sender, EventArgs e)
        {
            this.Hide();
            Employees.Show();
        }

        private void picInventory_Click(object sender, EventArgs e)
        {
            this.Hide();
            Inventory.Show();
        }

        private void picMenus_Click(object sender, EventArgs e)
        {
            this.Hide();
            Menus.Show();
        }

        private void picInfo_Click(object sender, EventArgs e)
        {
            this.Hide();
            About.Show();
        }


        //Label Click Events:

        private void lblReservations_Click(object sender, EventArgs e)
        {
            this.Hide();
            Reservations.Show();
        }

        private void lblTodaysMenu_Click(object sender, EventArgs e)
        {
            this.Hide();
            TodaysMenu.Show();
        }
        
        private void lblBank_Click(object sender, EventArgs e)
        {
            this.Hide();
            Bank.Show();
        }

        private void lblOrders_Click(object sender, EventArgs e)
        {
            this.Hide();
            Orders.Show();
        }

        private void lblEmployees_Click(object sender, EventArgs e)
        {
            this.Hide();
            Employees.Show();
        }

        private void lblInvMng_Click(object sender, EventArgs e)
        {
            this.Hide();
            Inventory.Show();
        }

        private void lblMenus_Click(object sender, EventArgs e)
        {
            this.Hide();
            Menus.Show();
        }

        private void lblAbout_Click(object sender, EventArgs e)
        {
            this.Hide();
            About.Show();
        }
    }
 private void button1_Click(object sender, EventArgs e)
        {    
            string constr = @"";
            SqlConnection con = new SqlConnection(constr);
            try
            {
                con.Open();
                string sql = "SELECT * FROM Details where UserN=@UserN and PassW=@PassW";
                SqlParameter pUser = new SqlParameter("@UserN", txtUserName.Text);
                SqlParameter pPass = new SqlParameter("@PassW", txtPwd.Text);
                SqlCommand com = new SqlCommand(sql, con);
                com.Parameters.Add(pUser);
                com.Parameters.Add(pPass);
                SqlDataReader  dr = com.ExecuteReader();
                if(dr.Read())
                {
                    MainMenu MainMenu = new MainMenu();
                    this.Hide();
                    MainMenu.Show();
                }
                else
                {
                    MessageBox.Show("Username or Password is incorrect");
                    txtPwd.Text = "";
                    txtUserName.Text = "";
                    txtUserName.Focus();
                }
    
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();
            }
           
        }