Password and username trong c#

Mình đang ttajp viết chương trình mật khẩu. Mình viết thử cho username trước. Mình viết thế này, nó không báo lỗi nhưng không cho ra kết quả. Mình tìm mãi mà không biết chỗ sai. Mọi người giúp mình với ạ

for (i = 0; i <= ds.Rows.Count - 1; i++)
{
if (txtpassword.Text == ds.Rows[i].ItemArray[2].ToString())
MessageBox.Show("0k");
}

Chuỗi thì không nên dùng == để so sánh.
Nên dùng hàm Compare. Bạn tham khảo link

cảm ơn bạn nhiều nhá

mình chuyển về string.Compare thế này mà vẫn chưa được.Bạn có thể chỉ cho mình với
int result = string.Compare(txtpassword.Text,ds.Rows[i].ItemArray[2].ToString() );

               if(result==0)
                    MessageBox.Show("0k");

Có thể up đoạn code lấy username lên từ database lên được không.
Không biết đoạn đó nên không thể hiểu được khúc sau bạn so sánh đúng không.
Tốt nhất là up từ đoạn lấy user từ database đến chỗ so sánh này.

string connetionString = null;
SqlConnection sqlCnn;
SqlCommand sqlCmd;
SqlDataAdapter adapter = new SqlDataAdapter();
DataTable ds = new DataTable();
int i = 0;
string sql = null;

        connetionString = " Data Source=BAOPC;Initial Catalog=username-password;Integrated Security=True";
            sql = "Select * from passwordandusername";

        sqlCnn = new SqlConnection(connetionString);
        try
        {
            sqlCnn.Open();
            sqlCmd = new SqlCommand(sql, sqlCnn);
            adapter.SelectCommand = sqlCmd;
            adapter.Fill(ds);
            for (i = 0; i <= ds.Rows.Count - 1; i++)
            {
              
                int result = string.Compare(txtpassword.Text,ds.Rows[i].ItemArray[2].ToString() );
              
               if(result==0)
                    MessageBox.Show("0k");
               

            }
            adapter.Dispose();
            sqlCmd.Dispose();
            sqlCnn.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Can not open connection ! ");
        }

code của mình đây nhá. Bạn xem hộ mình với.

Dùng câu sql như vậy thì không biết cột nào là cột nào.
Bạn thử đặt debug khúc

int result = string.Compare(txtpassword.Text,ds.Rows[i].ItemArray[2].ToString() );

Để xem giá trị của ds.Rows[i].ItemArray[2] có phải là password không ?

1 Like

select *from passwordandusername là cái tên bảng mình tạo trong database mà, trong bảng này có cột password , hoten và username. và cái password nằm ở Item thứ 2

Vậy bạn debug xem có đúng là cột password không ?

1 Like

Đúng là cột password bạn à.

Vậy mình không biết bị gì nữa rồi.
Bạn thử chạy debug để xem 2 giá trị txtpassword và ds.Row[i].ItemArray[2] có giống nhau không.

1 Like

Chương trình của mình:
Nếu trong SQL server, bạn cho kiểu dữ liệu của cột password chứa một số phần tử nhất định, vd nvarchar[20] thì khi lưu từ trên chương trỉnh xuống database nó sẽ tự thêm khoảng trắng cho full 20 ký tự. Nên lúc lấy lên sẽ có khoảng trắng --> Không trùng khớp.

Trường hợp này mình dùng câu lệnh select * from ... WHERE trực tiếp xuống database luôn :smiley:

1 Like

bạn nói chuẩn quá, mình đã debug và thấy nó còn thừa nhiều ký tự trắng. Cảm ơn bạn nhiều nhá.

bạn ơi, bạn chỉ rõ cách khắc phục được không, mình đã thử nhưng vẫn chưa được :grinning:

Thay vì bạn Select dữ liệu lên rồi mới so sánh tài khoản mật khẩu, thì bây giờ bạn dùng câu lệnh Select * from … WHERE password=… để lấy trưc tiếp lên luôn

lấy trực tiếp là sao bạn? mình lấy giá trị từ datatable để so sánh với txtpassword.Text mà

// tham khảo xem :slight_smile:

1 Like

cảm ơn bạn nhé, mẫu chốt vấn đề nằm ở khi mình khai báo theo varchar thì mình nhập bao nhiêu ký tự nó sẽ hiểu như thế

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?