用于数据库登录的sql命令问题

时间:2016-01-03 15:21:03

标签: c# sql visual-studio-2013

我正在尝试使用名为“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);

        }

1 个答案:

答案 0 :(得分:4)

我的钱是Bat在TSQL中的reserved keyword。您可能希望将其与Table一起使用。作为更好的方法,将表名更改为 - 保留字。

但更重要的是,您应该始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。

不要将密码存储为纯文本。阅读Best way to store password in database

使用using statement自动处理您的连接和命令,而不是手动调用[Table]Close方法。

顺便说一句,我强烈怀疑你可能想要DisposeExecuteScalar method一起使用,因为你对其他事情没有做任何事情。