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)

20:21 29-04-2017 758 lượt xem 4 bình luận 13:43 30-04-2017

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.

 

 

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Trần Thành Vi Thanh Member đã bình luận 13:43 30-04-2017

Debug thử trong hàm ExecuteQuery xem nó chạy thế nào chưa.

ngovanmanh88 đã bình luận 08:13 30-04-2017

・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ả?

 

 

K9 SuperAdmin, KquizAdmin, KquizAuthor đã bình luận 21:39 29-04-2017

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

K9 SuperAdmin, KquizAdmin, KquizAuthor đã bình luận 21:38 29-04-2017

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ì

Câu hỏi mới nhất