2013-05-22 50 views
0

我有下面的代碼,OleDb的參數,空值

OleDbCommand cmd = new OleDbCommand("SELECT * FROM Users WHERE username = ? AND password = ?",conn); 

    OleDbParameter p1 = new OleDbParameter(); 
    OleDbParameter p2 = new OleDbParameter(); 
    cmd.Parameters.Add(p1); 
    cmd.Parameters.Add(p2); 
    p1.Value = usernametb.Text; 
    p2.Value = passwordtb.Text; 

    conn.Open(); 
    OleDbDataReader read = cmd.ExecuteReader(); 

     if (read.Read() == true) 
     { 
      conn.Close(); 
      MessageBox.Show("Successfully logged in!"); 
     } 
     else 
     { 
      conn.Close(); 
      MessageBox.Show("Login failed"); 
     } 

此代碼的工作對我來說,如果用戶有密碼,但如果用戶沒有密碼,那麼它失敗,我不不知道爲什麼。

我哪裏錯了?

+0

在哪裏你正在得到錯誤,這是什麼問題。? :)我想這裏'p2.Value = passwordtb.Text;'和錯誤是對象引用...正確。? – RajeshKdev

回答

0

以下是否有效?

SELECT * FROM Users WHERE username = ? AND 
          (password IS NULL OR password = ?) 
1

這是因爲在SQL標準null = null回報null而不是true

您的查詢應該是

SELECT * FROM Users WHERE username = ? AND (password is null or password = ?) 

一個更好的查詢將檢查當密碼null用戶必須輸入一個空密碼,所以這將是這樣的:

SELECT * FROM Users WHERE username = ? AND 
    ? = case when password is null then '' else password end