1

「無効なキャスト例外が処理されていません」というエラーが発生しました。SQLServer2008とVisualStudio2008を使用しています。文字列"Jack"からブール型への変換が無効です。

以下の私のフォームのコードを参照してください。

Imports System.Boolean

Imports System.Data.SqlClient

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim username As String
        Dim pswd As String
        Dim conn As SqlConnection
        Dim cmd As SqlCommand
        Dim reader As SqlDataReader

        username = txt_username.Text
        pswd = txt_password.Text
        txt_username.Text = Focus()
        txt_password.Visible = "False"
        Try
            conn = New SqlConnection("data source=TAMIZHAN\SQLEXPRESS;persistsecurity info=False;initial catalog=log;User ID=sa;Password=123");
            cmd = New SqlCommand("Select usename,passw from Userlog where usename='" + username + "' & passw='" + pswd + "'")
            conn.Open()
            reader = cmd.ExecuteReader()
            If (String.Compare(pswd and '"+passw+"')) Then
                MsgBox("Success")
            End If
            If (reader.Read()) Then

                MsgBox("Login success")

            End If
            conn.Close()
        Catch ex As Exception
            MsgBox("Error"+ex.Message());
        End Try
    End Sub
End Class
4

1 に答える 1

1

string.Compareはブール値ではなく整数を返すため、この方法で呼び出す必要があります

If (String.Compare(pswd,passw) = 0) Then 
    MsgBox("Success") 
End If 

MSDNのリファレンスを参照してください

ただし、現在のコードには多くの問題があります。

  • 文字列連結を使用してSQLテキストを作成しています(SqlInjection、引用の問題)。
  • Usingステートメントは使用しません(例外が発生した場合に接続は開いたままになります)。
  • 比較ロジックは絶対に必要ないようです。
于 2012-08-14T14:59:46.427 に答える