2012-03-15 18 views
1

私のクエリが値を返すかどうかを確認し、それに応じて残りのロジックを書きたいかどうかを確認します。Cでのsqlコマンドの戻り確認#

SqlCommand myCommand = new SqlCommand("Select * from phc.userbase where [user]='@Username' and [password]='@password'", myConnection); 

このコマンドがnullを返します。試しました

myReader = myCommand.ExecuteReader(); 
bool rd = myReader.Read(); 

if rd==false 

私はそれを働かせることはできません。何か案は?ここで

は私のパラメータです:それはあなたがここにnullによって何を意味するかによって異なり

SqlParameter myParam = new SqlParameter("@Username", SqlDbType.VarChar, 25); 
myParam.Value = usr; 

SqlParameter myParam2 = new SqlParameter("@password", SqlDbType.VarChar, 25); 
myParam2.Value = pass; 
+2

そう...あなたは、データベース内のプレーンテキストとしてパスワードを保存していますか?それは***良い***です。また、パラメータを正しくパラメータ化しているかどうかは不明です。パラメータは引用符で囲まれていないはずです。 –

+0

@MarcGravellこれは単なるダミーのデモです。後でMD5暗号化を使用する予定です。 – deception1

+0

明快にする:現時点では、パスワードが「@ Password」である「@ Username」というユーザを検索しています。これは、パラメータの値と同じユーザ名を持っているかどうかをチェックするのとは非常に異なります'@ユーザー名 '。私はそのクエリは常にゼロ行を返すだろう、賭けましたか? –

答えて

2

。あなたは「行がない」という意味ですか?その場合:

using(var myReader = myCommand.ExecuteReader()) { 
    if(myReader.Read()) { 
     // at least 1 row; can now check columns 
    } else { 
     // no rows 
    } 
} 

正直に言うと、しかし、あなたはおそらくSELECT 1 ...にそれを変更し、ExecuteScalarを使用することができます - はるかに少ない気。この場合

は、しかし、それはおそらくちょうどSELECT 1 ...rest of query...と使用が容易である:

object value = myCommand.ExecuteScalar(); 
if(value != null) { ... got a row ...} 
+0

実行スカラーで正しい方向に向けることができます – deception1

+0

@deception1が編集します –

2

使用SqlDataReader.HasRows()

if (myReader.HasRows()) 
{ 
    // Do something 
} 
+0

私はちょうど私の質問が値を返すかどうかを知りたいです。もし私が間違っていれば私には許してください。しかし、テーブル内の値をチェックしませんか? – deception1

+2

@ deception1あなたの質問にはフィルタがあります。クエリが一致を検出した場合にのみ 'HasRows()'となります –

関連する問題