2016-05-29 12 views
0

というコードを記述する方法です。このコマンドを作成してデータベースからデータを取得する方法は次のとおりです。コードは、入力されたデータがデータベースのデータと同じであれば、このフォームを閉じて新しいデータを開きます。c#データベースからのデータが入力されたデータと同じ場合は、

SqlDataAdapter command = new SqlDataAdapter("select * from tblLogin where Gebruikersnaam = @Gebruiker and GeheimeVraag = @GeheimeVraag and Antwoord = @Antwoord", con); 
     DataTable dt = new DataTable(); 
     command.SelectCommand.Parameters.AddWithValue("@Gebruiker", txtGebruikersnaam.Text); 
     command.SelectCommand.Parameters.AddWithValue("@GeheimeVraag", ddlGeheimeVraag.Text); 
     command.SelectCommand.Parameters.AddWithValue("@Antwoord", txtAntwoord.Text); 
     command.Fill(dt); 

     if() 
     { 
      this.Hide(); 
      FormLoginWW2 ss = new FormLoginWW2(); 
      ss.Show(); 
     } 
     else 
     { 
      MessageBox.Show("Error"); 
     } 
+0

「データが正しい」とはどういう意味ですか?どのようにこれを判断するのですか? –

+0

と同じデータがデータベース内のデータと同じ場合。それがより明確になることを望んで質問を編集しました – Viktor

答えて

1

あなたはquery and return a scalar valueでき、その評価:

をSQLDATA

SqlCommand command = new SqlCommand("select 1 from tblLogin where Gebruikersnaam = @Gebruiker and GeheimeVraag = @GeheimeVraag and Antwoord = @Antwoord", con); 
     command.SelectCommand.Parameters.AddWithValue("@Gebruiker", txtGebruikersnaam.Text); 
     command.SelectCommand.Parameters.AddWithValue("@GeheimeVraag", ddlGeheimeVraag.Text); 
     command.SelectCommand.Parameters.AddWithValue("@Antwoord", txtAntwoord.Text); 

var value = command.ExecuteScalar(); 

if (Object.Equals(value, 1)) 
{ 
    //Success 
} 
else 
{ 
    //Failure 
} 

'1' の値は、おそらくint型ではなく、ブール値として評価されますので、あなたは、クエリにキャストすることができますboolを期待したい場合は... 1でなければ結果が返されないことを意味し、代わりに `DBNull.Value 'が返されます。

+0

私にこのエラーを与えるのは不思議ですhttps://gyazo.com/d8c600f17c92630051fb664fa97283f4編集:もしどこに変更する必要があれば、sqldataadapterだけをアダプタに追加する必要があります。正確に? – Viktor

+0

申し訳ありませんが、SQLCommandに変更されました。あなたはアダプタを必要としません - そのためのコマンドを使用してください。 –

1

あなたのクエリは、dbテーブル内の特定の行を参照していると思います。

一つのアプローチとして、私が説明したようにこれを行うための別の方法は次のようになりBrian Mains

によって説明される:あなたは

if(dt!=null) 
{ 
    if(dt.Rows.Count>0) 
    { 
    //do your code 
    } 
} 

以下

更新を行うことができます。最初のレコードを返すようにクエリを変更することができます(ログイン以来、常に1つのレコードと仮定しています)

SqlDataAdapter command = new SqlDataAdapter("select TOP 1 * from tblLogin where Gebruikersnaam = @Gebruiker and GeheimeVraag = @GeheimeVraag and Antwoord = @Antwoord", con); 
     DataTable dt = new DataTable(); 
     command.SelectCommand.Parameters.AddWithValue("@Gebruiker", txtGebruikersnaam.Text); 
     command.SelectCommand.Parameters.AddWithValue("@GeheimeVraag", ddlGeheimeVraag.Text); 
     command.SelectCommand.Parameters.AddWithValue("@Antwoord", txtAntwoord.Text); 
     command.Fill(dt); 



if(dt!=null) 
    { 
     if(dt.Rows.Count>0) 
     { 
       this.Hide(); 
       FormLoginWW2 ss = new FormLoginWW2(); 
       ss.Show(); 
      } 
    else 
      { 
       MessageBox.Show("Error"); 
      } 
    } 
+0

いいえ、テキストボックスに入力したデータがデータベースのデータと同じかどうかを確認したいと思います。ログインシステムのように考える – Viktor

+0

@Viktor私の編集をチェック – TheUknown

+0

私の質問に答えるために時間をとってくれてありがとう、悲しいことに、私はvar value = command.ExecuteScalar()と思うので、 ;将来的には非常に便利です。しかし、私は間違いなくdatatableを使用してあなたのメソッドを使用します。私はあなたに最高の答えとしてあなたを選んでいないことを怒らないことを願っています。 – Viktor

関連する問題