30/09/2018, 18:48

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");
}
vũ xuân quân viết 20:49 ngày 30/09/2018

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

docs.microsoft.com

String.Compare Method (System)

Compares two specified objects and returns an integer that indicates their relative position in the sort order.

Chiến Binh Thép viết 20:49 ngày 30/09/2018

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

Chiến Binh Thép viết 21:02 ngày 30/09/2018

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");
vũ xuân quân viết 20:57 ngày 30/09/2018

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.

Chiến Binh Thép viết 20:51 ngày 30/09/2018

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.

vũ xuân quân viết 21:04 ngày 30/09/2018

sql = “Select * from passwordandusername”;

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 ?

Chiến Binh Thép viết 20:55 ngày 30/09/2018

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ũ xuân quân viết 20:49 ngày 30/09/2018

và cái password nằm ở Item thứ 2

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

Chiến Binh Thép viết 20:54 ngày 30/09/2018

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

vũ xuân quân viết 21:01 ngày 30/09/2018

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.

Đoàn Hiếu Tâm viết 20:52 ngày 30/09/2018

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

Chiến Binh Thép viết 20:49 ngày 30/09/2018

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á.

Chiến Binh Thép viết 20:50 ngày 30/09/2018

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

Đoàn Hiếu Tâm viết 20:52 ngày 30/09/2018

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

Chiến Binh Thép viết 20:49 ngày 30/09/2018

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à

Dương Nylghara viết 21:04 ngày 30/09/2018
ittutorialswithexample.com

Simple Windows Form Login Application in C#

IT Tutorials with Example: In this Post, we will learn how to create a Simple Windows form Login application.

// tham khảo xem

Chiến Binh Thép viết 21:01 ngày 30/09/2018

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ế

Bài liên quan
0