.executenonquery()error没有给出一个或多个必需参数的值

时间:2013-11-14 13:57:35

标签: vb.net

Imports System.Data.OleDb

公共类LoginForm     Dim connstring As String =“Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\ Users \ User \ Desktop \ thesis \ YBIM.accdb”     Dim conn As New OleDbConnection     'TODO:使用提供的用户名和密码插入代码以执行自定义身份验证     '(见http://go.microsoft.com/fwlink/?LinkId=35339)     '然后可以将自定义主体附加到当前线程的主体,如下所示:     'My.User.CurrentPrincipal = CustomPrincipal     'CustomPrincipal是用于执行身份验证的IPrincipal实现。     '随后,My.User将返回封装在CustomPrincipal对象中的身份信息     '例如用户名,显示名称等

Private Sub LoginForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    conn.ConnectionString = connstring

    If conn.State = ConnectionState.Closed Then
        conn.Open()
        MsgBox("welcome")
    Else
        MsgBox("Cannot connect to database")
    End If
End Sub

Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
    Dim SqlQuery As String = ("SELECT * FROM tablelogin WHERE Username= @field1 AND Password=@field2")
    Dim SqlCommand As New OleDbCommand
    Dim Sqlrdr As OleDbDataReader

    With SqlCommand
        .CommandText = SqlQuery
        .Connection = conn
        .Parameters.AddWithValue("@field1", UsernameTextBox.Text)
        .Parameters.AddWithValue("@field2", PasswordTextBox.Text)
        .ExecuteNonQuery()
    End With

    Sqlrdr = SqlCommand.ExecuteReader()

    If (Sqlrdr.Read() = True) Then
        home.ShowDialog()
        Me.Hide()
    Else
        MsgBox("wong input")
    End If


End Sub

结束班

1 个答案:

答案 0 :(得分:0)

您的代码中有两点需要注意,您可以采取补救措施。

1 *您正在错误地命名参数。 这样:

    .Parameters.AddWithValue("@field1", UsernameTextBox.Text)
    .Parameters.AddWithValue("@field2", PasswordTextBox.Text)

应该是这样的:

.Parameters.AddWithValue("field1", UsernameTextBox.Text)
.Parameters.AddWithValue("field2", PasswordTextBox.Text)

2 *您正在执行该命令两次。从With语句中删除.ExecuteNonQuery(), 并改变:

Sqlrdr = SqlCommand.ExecuteReader()

Dim ret As Integer
ret = SqlCommand.ExecuteNonQuery()

而不是使用Sqlrdr.Read(),只需检查ret> 0(ExecuteNonQuery返回受命令影响的行数)。