Hỏi đáp
Chia sẻ kiến thức, cùng nhau phát triển
C# Hỏi về lỗi khi làm chức năng đăng nhập (Quản lý quán cafe)
Xin chào mọi người.
MÌnh đang theo học các bài giảng của HowKTeam trên Youtue, về Lập trình phần mềm quản lý quán cafe (C#). Tuy nhiên khi làm chức năng đăng nhập thì bị lỗi.
Cụ thể như sau.
Mình có 2 class như dưới đây.
1) Class fLogin.cs
private void btnLogin_Click(object sender, EventArgs e)
{
string userName = txtUserName.Text;
string passWord = txtPassWord.Text;
if(Login(userName , passWord))
{
this.Hide();
fTableManager f = new fTableManager();
f.ShowDialog();
this.Show();
}
else
{
MessageBox.Show("Sai ten tai khoan hoac mat khau!");
}
}
bool Login(string userName, string passWord)
{
return AccountDAO.Instance.Login(userName, passWord);
}
2)Class Account DAO
public bool Login(string userName, string passWord)
{
//Cách 1
//string query = "select * from dbo.Account where UserName = N'" + userName + "' and PassWord = '" + passWord + "'";
//DataTable result = DataProvider.Instance.ExecuteQuery(query);
//Cách 2
string query = "exec USP_Login @userName , @passWord";
DataTable result = DataProvider.Instance.ExecuteQuery(query, new object[] { userName, passWord });
return result.Rows.Count > 0;
}
Trong phương thức Login ở class Account DAO, Khi thiết lập biến query theo cách 1, thì chương trình không xảy ra vấn đề gì, và Nếu nhập đúng username, password có trong cơ sở dữ liệu, thì phương thức login này trả về giá trị True.
Tuy nhiên khi xử dụng PROCEDURE như cách thứ 2 thì dù nhập đúng username, password thì phương thức login vẫn trả về giá trị False.
Mình đã nghĩ có lẽ do thiết lập store procedure xảy ra vấn đề :
USE QuanLyQuanCafe
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'USP_Login') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[USP_Login]
GO
CREATE PROCEDURE USP_Login
@userName nvarchar(100),@passWord nvarchar(100)
AS
BEGIN
select * from dbo.Account WHERE UserName = @userName and Password = @passWord;
END
GO
Tuy nhiên khi test thử như bên dưới thì sql server vẫn trả về là có thông tin user, pasword như thế.
EXEC USP_Login 'K9', 1
Mình không hiểu nguyên nhân do đâu nữa.
Debug thử trong hàm ExecuteQuery xem nó chạy thế nào chưa.
・Mình debug theo cách 2 thì result.Rows.Count trả về giá trị là 0.
・Câu SQL cuối EXEC USP_Login 'K9', 1 khi chạy trong SQL server thì trả về giá trị :
UserName|DisplayName|Password|Type
K9 RongK9 1 1
・Dấu nháy đơn trong câu SQL bạn nói là dấu nháy đơn chỗ giá trị password '1' đó hả?
Mình nghĩ là bạn thiếu dấu nháy đơn '
Vì SQL so sánh chuỗi. Không tin bạn thử lấy câu query cuối của lệnh nó truyền vào SQL chạy thử sẽ thấy
cái này bạn debug cách 2 xem nó trả ra mấy dòng..
Bạn lấy cấu SQL cuối của nó ra chạy trong SQL xem kết quả ra là gì