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 を実行しています。

"SELECT FROM Users where UserName=@cName" を実行し、標準の Select を実行する方が簡単だと思います。

于 2013-03-11T10:18:35.987 に答える
1

ExecuteNonQueryDML クエリ用です。行を変更していません。したがって、結果は -1 になります。

あなたが使用することができますselect count(client_id) from tbl_client where client_name=@cname

そして、カウントを取得しますcmd.ExecuteScalar

于 2013-03-11T10:18:44.660 に答える