C# 使用参数化查询检查重复的用户名

C# 使用参数化查询检查重复的用户名,c#,asp.net,tsql,ado.net,C#,Asp.net,Tsql,Ado.net,我想检查数据库中是否已经存在用户名 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.Comman

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

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


问题是什么。

ExecuteNonQuery
返回受影响的行数,通常用于insert、update或delete语句。与
计数一起使用

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的一个相关答案:

ExecuteOnQuery
返回受影响的行数,通常用于insert、update或delete语句。与
计数一起使用

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相关的答案:

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


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

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


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

ExecuteNonQuery
用于DML查询。您没有修改和删除行。结果是-1

您可以使用
从tbl\u client中选择count(client\u id),其中client\u name=@cname


并使用
cmd获取计数。ExecuteScalar
ExecuteOnQuery
用于DML查询。您没有修改和删除行。结果是-1

您可以使用
从tbl\u client中选择count(client\u id),其中client\u name=@cname

并使用
cmd.ExecuteScalar