投稿者 ど素人  (社会人) 投稿日時 2018/5/24 14:48:32
>Password.Text を空欄( "" ) にしておき、Id に「存在しない値」が指定された場合、
>今の実装だと、Dim Pass As String の内容は Nothing のままなので、
> If Password.Text = Pass Then
>のチェックを通過してしまいます。これだと認証をすり抜けてしまいませんか?

すり抜けてしまいました。
すみません!処理をどうしようと考えて書くの忘れていました。

・修正後
    Private Sub OK_Click(sender As Object, e As EventArgs) Handles OK.Click

        Dim Pass As String
        Dim Flag As Integer = 0

        Dim cnstr As String = "<接続文字列>"

        Using cn = New SqlConnection(cnstr)
            cn.Open() ' 接続のオープン

            Dim sqlQuery As String = "SELECT Password, 権限 FROM [dbo].[Table] WHERE ID = @Id"
            Using cmd As New SqlCommand(sqlQuery, cn) ' コマンドの作成
                cmd.Parameters.Add("@Id", SqlDbType.VarChar, 50).Value = Id.Text

                Using rd As SqlDataReader = cmd.ExecuteReader() ' コマンドの実行

                    If rd.Read() Then
                        Pass = rd.GetString("Password")
                        Flag = rd.GetString("権限")
         Else
                    End If

                    rd.Close()  'Close は呼んでも呼ばなくても良い 
                End Using
            End Using

            cn.Close()  'Close は呼んでも呼ばなくても良い 
        End Using


        If Password.Text = Pass Then
            MessageBox.Show("ユーザー名とパスワードを受け付けました。")
            Me.Close()

        Else
            MessageBox.Show("認証できません。")
            Id.Clear()
            Password.Clear()
            Username.Focus()
        End If
    End Sub

>Dim Pass As String = ""
>Dim Flag As Integer = 0
はPass = rd.GetString("Password")で宣言がないとなるのでだしました。


実行しますとPass = rd.GetString("Password")の部分で下記のようになります。入力は(a,a)など

型 'System.InvalidCastException' のハンドルされていない例外が Microsoft.VisualBasic.dll で発生しました
追加情報:String "Password" から型 'Integer' への変換は無効です。