我想检查数据库中是否已存在用户名。
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
有什么问题。?
答案 0 :(得分: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 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
答案 1 :(得分:1)
ExecuteNonQuery返回受INSERT,UPDATE或DELETE语句影响的行数。你正在运行SELECT。
我发现“从UserName = @cName中选择用户”并运行标准选择更容易。
答案 2 :(得分:1)
ExecuteNonQuery
适用于DML查询。您没有修改和行。所以你得到-1的结果。
您可以使用select count(client_id) from tbl_client where client_name=@cname
使用cmd.ExecuteScalar