2013-03-11 32 views
0

我想檢查用戶名是否已存在於數據庫中。使用參數化查詢檢查重複的用戶名

SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["DBCOnn"].ToString()); 
try 
{ 
    con.Open(); 

    SqlCommand cmd = new SqlCommand("select client_id from tbl_client where [email protected]", con); 
    cmd.CommandType = CommandType.Text; 

    cmd.Parameters.Add("@cname", DbType.String).Value = usernm; 

    int i = cmd.ExecuteNonQuery(); 
    if (i > 0) 
     return true; 
    else 
     return false; 
} 
catch (Exception ex) 
{ 
    throw new Exception("CheckExistingClient:" + ex.Message, ex.InnerException); 
} 
finally 
{ 
    con.Close(); 
} 

但在這裏,i總是給作爲-1

這是什麼問題?

回答

3

ExecuteNonQuery返回受影響的行數,通常用於insert-,update-或delete-語句。改爲使用ExecuteScalar而不是COUNT

using (var con = new SqlConnection(ConfigurationManager.AppSettings["DBCOnn"].ToString())) 
using(var cmd = new SqlCommand("select COUNT(client_id) from tbl_client where [email protected]", con)) 
{ 
    cmd.Parameters.Add("@cname", DbType.String).Value = usernm; 
    con.Open(); 
    int i = (int)cmd.ExecuteScalar(); 
    return i > 0; 
} 

這裏是SO相關答案:https://stackoverflow.com/a/4269651/284240

+0

哎呀,獲取計數,它爲什麼沒有來我mind..Thanks..It現在的作品。 – 2013-03-11 10:19:41

1

的ExecuteNonQuery返回受INSERT,UPDATE行數或DELETE語句。你正在運行一個SELECT。

我覺得它更容易「選擇用戶名,其中UserName = @ cName」並運行標準的選擇。

1

ExecuteNonQuery是用於DML查詢。你沒有修改和行。所以你得到的結果爲-1。

你可以使用select count(client_id) from tbl_client where [email protected]

而且隨着cmd.ExecuteScalar