0

我想检查数据库中是否已经存在用户名。

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

   SqlCommand cmd = new SqlCommand("select client_id from tbl_client where client_name=@cname", 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

问题是什么。?

4

3 回答 3

3

ExecuteNonQuery返回受影响的行数,通常用于插入、更新或删除语句。改用ExecuteScalarwith COUNT

using (var con = new SqlConnection(ConfigurationManager.AppSettings["DBCOnn"].ToString()))
using(var cmd = new SqlCommand("select COUNT(client_id) from tbl_client where client_name=@cname", 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

于 2013-03-11T10:18:05.737 回答
1

ExecuteNonQuery 返回受 INSERT、UPDATE 或 DELETE 语句影响的行数。您正在运行 SELECT。

我发现“从 UserName=@cName 的用户中选择”并运行标准选择更容易。

于 2013-03-11T10:18:35.987 回答
1

ExecuteNonQuery用于 DML 查询。您没有修改和行。所以你得到的结果是-1。

你可以使用select count(client_id) from tbl_client where client_name=@cname

并得到计数cmd.ExecuteScalar

于 2013-03-11T10:18:44.660 回答