Форма входа в стиле Sql 3layered

Я пытаюсь сделать приличную форму входа для моего приложения с помощью Sql server management studio. Я должен сделать это 3 слоя.

Я думаю, что они оба правильны, в моей основной форме у меня есть 2 txtboxes и кнопка, однако я понятия не имею, как соединить одно и другое, что, когда я ввожу имя пользователя и pw, они проверяют его с базой данных, чтобы узнать, верны ли оба,

пока что я получил:

public class UsersDB
{
    public static Users GetUsers(string username, string password)
    {

        SqlConnection conn = QuizzesDB.GetConnection();
        Users user = new Users();

        string selectStatement =
            "SElECT * " +
            "FROM Users" +
            "WHERE User_Name = @User_Name" +
            "AND Password = @Password";
        SqlCommand selectCommand = new SqlCommand(selectStatement, conn);
        selectCommand.Parameters.AddWithValue("@User_Name", username);
        selectCommand.Parameters.AddWithValue("@Password", password);

        try
        {
            conn.Open();
            SqlDataReader reader = selectCommand.ExecuteReader();
            while (reader.Read())
            {
                user.username = reader["User_Name"].ToString();
                user.password = reader["Password"].ToString();
            }
            reader.Close();
        }
        catch (SqlException ex)
        {
            throw ex;
        }
        finally
        {
            conn.Close();
        }
        return user;
    }
}

Класс, где я получаю информацию из моей базы данных.

второй класс

public class Users
{
    private string cUsername;
    private string cPassword;

    public Users() { }

    public string username
    {
        get { return cUsername; }
        set { cUsername = value; }
    }
    public string password
    {
        get { return cPassword; }
        set { cPassword = value; }
    }
}

я пробовал что-то вроде этого: но я всегда получаю сообщение об ошибке "Неверный синтаксис рядом с '='".

private void btnLogin_Click(object sender, EventArgs e)
    {
        string userName = txtUsername.Text;
        string password = txtPassword.Text;
        Users user = new Users();
        user = UsersDB.GetUsers(userName, password);
        try
        {
            user = UsersDB.GetUsers(userName, password);
            if (user == null)
            {
                MessageBox.Show("wrong username or password", "Login");
            }
            else
            {
                MessageBox.Show("login succesvol", "Login");
            }
        }
        catch (Exception ex){
            throw ex;
        }           
    }

1 ответ

В дополнение к плохому стилю кодирования у вас есть небольшая проблема в вашем запросе SQL:

string selectStatement =
        "SElECT * " +
        "FROM Users" + // <-- you need an space before "
        "WHERE User_Name = @User_Name" + // <-- also here
        "AND Password = @Password";

Почему бы не использовать однострочный запрос?

string selectStatement =
    "SElECT * FROM Users WHERE User_Name = @User_Name AND Password = @Password";

И если вам действительно нужен многострочный запрос, почему бы не использовать дословные строки?

string selectStatement =  @"
    SElECT * 
    FROM Users
    WHERE User_Name = @User_Name
    AND Password = @Password";
Другие вопросы по тегам