2013-03-11 164 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