Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
ログインフォーム
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30326#CommentId83268
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
ど素人
 (社会人)
投稿日時
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' への変換は無効です。