投稿者 魔界の仮面弁士  (社会人) 投稿日時 2018/5/24 16:31:15
データ型を意識したコーディングが行われていないように見えます。

Form の先頭に、「Option Strict On」という宣言を付けておき、
それでコンパイルが通るようなコードになるよう、見直してみてください。
(現状は、コンパイル オプションが Option Strict Off になっているはず)


>> これだと認証をすり抜けてしまいませんか?
> すり抜けてしまいました。

なのでこの場合、「If Password.Text = Pass Then」の判定処理を末尾に置くのではなく、
それを If rd.Read() Then のブロック内に移動させてしまえば良いと思います。


ついでに、「該当する Id が無い」状態と、「Id は正しいがパスワードが間違っている」状態を
区別するか同一視するかも、アプリケーション設計時点で決めておきましょう。


> Dim Flag As Integer = 0
> Flag = rd.GetString("権限")

えぇと…。
何故、Integer 型の変数に、String 型の値を代入しようとしているのでしょうか。

そもそも、データベース側の [権限]フィールドのデータ型は何になっていて、
そこには何という値が入っているのでしょうか。


> 追加情報:String "Password" から型 'Integer' への変換は無効です。 

これは文字通りの意味でしょうね。
極端な話、下記のようなコードを書けば、まったく同じエラーが再現されます。

たとえば、"123" という文字列を Integer にすることならできるかもしれませんが、
"Password" という文字列を Integer にすることは、当然できないわけで…。

Dim x As String = "Password"
Dim y As Integer = x  '【InvalidCastException】 
' 「String "Password" から型 'Integer' への変換は無効です。」