2012-03-15 67 views
1

我想檢查我的查詢是否返回任何值,並相應地寫入其餘的邏輯。檢查返回的SQL命令在C#

SqlCommand myCommand = new SqlCommand("Select * from phc.userbase where [user]='@Username' and [password]='@password'", myConnection); 

我想知道這個命令是否返回null。我試圖

myReader = myCommand.ExecuteReader(); 
bool rd = myReader.Read(); 

if rd==false 

,但我無法得到它的工作。有任何想法嗎?

這裏是我的參數:

SqlParameter myParam = new SqlParameter("@Username", SqlDbType.VarChar, 25); 
myParam.Value = usr; 

SqlParameter myParam2 = new SqlParameter("@password", SqlDbType.VarChar, 25); 
myParam2.Value = pass; 
+2

所以......你存儲的密碼作爲數據庫中的純文本?這是不好的***。另外,還不清楚你是否正確參數化 - 參數可能不應該用引號引起來。 – 2012-03-15 08:10:11

+0

@MarcGravell這只是一個模擬demo.I計劃稍後使用MD5加密。 – deception1 2012-03-15 08:12:45

+0

澄清:目前您正在搜索一個名爲「@ @用戶名」的用戶,密碼爲「@ Password」,這與檢查用戶名是否與參數值相同'@ Username'。我敢打賭,查詢總是返回零行,對吧? – 2012-03-15 08:14:23

回答

2

這取決於你的null這裏的意思;你的意思是「沒有行」?如果是這樣的:

using(var myReader = myCommand.ExecuteReader()) { 
    if(myReader.Read()) { 
     // at least 1 row; can now check columns 
    } else { 
     // no rows 
    } 
} 

說實話,雖然,你也許可以改變,要SELECT 1 ...和使用ExecuteScalar - 少得多費心。

在這種情況下,雖然,它可能是更容易只是SELECT 1 ...rest of query...及用途:

object value = myCommand.ExecuteScalar(); 
if(value != null) { ... got a row ...} 
+0

你可以用正確的方向指向我,執行標量爲 – deception1 2012-03-15 08:28:44

+0

@deception1將編輯 – 2012-03-15 08:29:28

2

使用SqlDataReader.HasRows()

if (myReader.HasRows()) 
{ 
    // Do something 
} 
+0

我只想知道我的查詢是否返回值或不。如果我錯了,請原諒我,但是,這不會檢查表中的值嗎? – deception1 2012-03-15 08:14:48

+2

@ deception1你的查詢有一個過濾器;如果你的查詢發現匹配,它將只有'HasRows()' – 2012-03-15 08:17:17