2016-04-25 5 views
-1

電子メールとパスワードのユーザー入力がデータベースと一致するかどうかを確認する必要があるログインフォームがあります。VB.net SqlDataReader GetString関数にnull値がある場合のmessageboxの表示方法?

Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click 


    myConn = New SqlConnection(My.Settings.MySQLData) 

    myCmd = myConn.CreateCommand 

    myCmd.CommandText = "SELECT Email FROM dbo.[User]" & 
         " WHERE Email = '" & tbEmail.Text & "'" 

    myConn.Open() 
    myReader = myCmd.ExecuteReader 

    myReader.Read() 


    If myReader.IsDBNull(0) Then 

     MessageBox.Show("The email address input is invalid or does not exist in database.") 

    ElseIf myReader.GetString(0) <> tbEmail.Text Then 

     MessageBox.Show("The email address input is invalid or does not exist in database.") 

    Else 

     MessageBox.Show("Email address is OK") 

    End If 


    myReader.Close() 
    myConn.Close() 

これはメールの部分です。私はまだパスワード部分を持っています。

上記のコードは動作しません。ログインのためにデータベースに対してチェックする最良の方法は何ですか?

+0

"動作しません"を定義します。どのような*具体的な方法で失敗するのですか?また、あなたのコードはSQLインジェクションに対して広く公開されています。コードとしてユーザー入力を直接実行するのではなく、クエリパラメータを使用する必要があります。 – David

+0

データが存在しないときに読み込みが無効です。 – iamhx

答えて

0

はDataTableReaderのReadメソッドを呼び出すための要件を回避するためにHasRowsプロパティを使用していません現在の結果セット内の行。 - Msdn

 If reader.HasRows Then 
     myReader.Read() 
    Else 
     MessageBox.Show("no data present") 
    End If 
+0

パスワードは大文字と小文字を区別しないようです。これを解決する方法はありますか? – iamhx

0

は、上記のあなたのコメントによると、エラーは次のとおりです。データが存在しない時に読むため

無効な試み。

これはコードは、少なくとも1つのレコードは、SQLクエリによって返されていることが、が返されるレコードなしを想定していることを意味します。つまり、WHERE句の条件に一致するレコードはありません。

レコードを読み取ろうとする前に、レコードの存在を確認する必要があります。 SqlDataReaderを使用する場合は、Read()メソッドのブール値の結果を調べることによって行われることがよくあります。たとえば:

While myReader.Read() 
    ' read the values here, for example: 
    myReader.GetString(0) 
End While 

はできるだけ早く myReader.Read()はつまり、 Falseに評価されていない複数のレコードがクエリ結果に存在しています。最初の試行で Falseと評価された場合、最初はクエリ結果にレコードが存在しないことを意味します。

0

ここに示したユーチューブの動画から:https://www.youtube.com/watch?v=iyjGP4fP7IE

コードmyReader.HasRowsはありません面倒でデータベースに対してチェックされます。

私の新しいコード:何があるかどう

myConn =新しいSqlConnectionオブジェクト(My.Settings.MySQLData)

myCmd = myConn.CreateCommand 

    myCmd.CommandText = "SELECT Email, Password FROM dbo.[User]" & 
         " WHERE Email = '" & tbEmail.Text & "'" & 
         " AND Password = '" & tbPassword.Text & "'" 

    myConn.Open() 
    myReader = myCmd.ExecuteReader 



    If myReader.HasRows Then 
     LoginScreen.Show() 

    Else 
     MessageBox.Show("Invalid Email or Password") 

    End If 



    myReader.Close() 
    myConn.Close() 
関連する問題