投稿者 ど素人  (社会人) 投稿日時 2018/5/24 10:47:37
魔界の仮面弁士さま

 >Connection / Command / DataReader に関しては、Using ブロックで囲った方が良いかも知れませ.ん。
Usingブロックに関して調べて囲ったほうがいいということはわかったのですがどのように囲えばいいでしょうか?

>これだと、OK ボタンを押さずに、画面右上の×で閉じた場合にも認証処理が通過してしまうのではありませんか? 
最初のようにControlBoxをなくしボタンで終了するようにしました。

・指摘されたとこを修正後

 Private Sub OK_Click(sender As Object, e As EventArgs) Handles OK.Click

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

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

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

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

        Dim Pass As String
        Dim Flag As String = "0"

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

        rd.Close()
        cn.Close() ' 接続のクローズ

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

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

現状これを動かすと        
Dim sqlQuery As String = "SELECT Password, 権限 FROM [dbo].[Table] WHERE ID = @Id.Text"

型 'System.Data.SqlClient.SqlException' のハンドルされていない例外が System.Data.dll で発生しました

追加情報:Must declare the scalar variable "@Username

Dim sqlQuery As String = "SELECT Password, 権限 FROM [dbo].[Table] WHERE ID = Id.Text"

型 'System.Data.SqlClient.SqlException' のハンドルされていない例外が System.Data.dll で発生しました

追加情報:The multi-part identifier "Id.Text" could not be bound.

となります