0

SQL Server Management Studioを使用して、アプリケーション用の適切なログインフォームを作成しようとしています。私はそれを3層にすることになっています。

私は両方とも正しいと思います。私のメインフォームには2つのtxtboxとボタンがありますが、ユーザー名と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;
    }
}

データベースから情報を取得するクラス。

2番目のクラスは

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;
        }           
    }
4

1 に答える 1

0

コーディング スタイルが悪いことに加えて、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";
于 2013-02-09T14:47:15.763 に答える