数据库登录的sql命令问题

本文关键字:命令 问题 sql 登录 数据库 | 更新日期: 2023-09-27 18:28:51

我正试图使用名为"table"的数据库表中的用户名和密码创建一个登录表单。我看了几个视频,看了其他几个页面,似乎无法正确运行查询。我的第二个try/catch块显示消息框"无法运行查询"。有人能看一下我的代码,看看哪里出了问题吗?谢谢。

SqlConnection con = new SqlConnection();
string connectionString = @"Data Source=(LocalDB)'v11.0;AttachDbFilename=C:'Users'Donovan'Documents'Work'Time Clock program'Time Clock program1.2'Time Clock program'Database1.mdf;Integrated Security=True;Connect Timeout=30;";
string query = "SELECT Count(*) FROM [Table] WHERE Username='" + usernameTextBox.Text +
            "' AND Password = '" + this.passwordTextBox.Text + "'";
        try
        {
            con = new SqlConnection(connectionString);
        }
        catch(Exception ex)
        {
            MessageBox.Show("Could not connect to Database");
            MessageBox.Show(ex.Message);
        }
        try
        {
            if (!(usernameTextBox.Text == string.Empty))
            {
                if (!(passwordTextBox.Text == string.Empty))
                {
                    SqlCommand cmd = new SqlCommand(query, con);
                    SqlDataReader dbr;
                    con.Open();
                    dbr = cmd.ExecuteReader();
                    int count = 0;
                    while (dbr.Read())
                    {
                        count = count + 1;
                    }
                    if (count == 1)
                    {
                        MessageBox.Show("username and password is correct");
                    }
                    else if (count > 1)
                    {
                        MessageBox.Show("Duplicate username and password", "login page");
                    }
                    else
                    {
                        MessageBox.Show(" username and password incorrect", "login page");
                    }
                }
                else
                {
                    MessageBox.Show(" password empty", "login page");
                }
            }
            else
            {
                MessageBox.Show(" username empty", "login page");
            }
            // con.Close();
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

数据库登录的sql命令问题

My money is for Table是TSQL中的保留关键字。您可能需要将其与[Table]一起使用。更好的方法是,将表名更改为保留字。

但更重要的是,您应该始终使用参数化查询。这种字符串串联对SQL注入攻击是开放的。

不要将密码存储为纯文本。读取在数据库中存储密码的最佳方式

使用using语句自动处理连接和命令,而不是手动调用CloseDispose方法。

顺便说一句,我强烈怀疑你可能想把SELECT COUNT(*)..ExecuteScalar方法一起使用,因为你对其他事情什么都不做。