You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行VB.NET数据库登录代码时出现Identifier expected等两类错误求助

VB.NET连接Access数据库错误修复:Identifier expected、Array bounds cannot appear in type specifer

尝试使用VB.NET连接Access数据库实现登录功能,原代码如下:

Imports.system
Imports System.Data.OleDb
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:  \repos\LEARN WITH MUZII\LEARN WITH MUZII\DATA LOGIN.accdb")
        con.Open()
        Dim query As String = "select * from Table1 where username=@user and password=@pass"
        Dim cmd As OleDbCommand(query,con)
        cmd.Parameter.Addwithvalue("@user", userTextBox1.Text)
        cmd.Parameter.Addwithvalue("@pass", passTextBox2.Text)
        Dim dr As OleDbDataReader
        dr = cmd.ExecuteReader
        If dr.HasRows = True Then
            MessageBox.Show("Login Successfully", "Sucess", MessageBoxButtons.OKCancel, MessageBoxIcon.Information)
            MessageBox.Show("Login Failed", "Failed", MessageBoxButtons.OKCancel, MessageBoxIcon.Information)

        End If

    End Sub

    Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles passTextBox2.TextChanged

    End Sub

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles userTextBox1.TextChanged

    End Sub
End Class

运行时出现两个错误:

  • Identifier expected
  • Array bounds cannot appear in type specifer

错误原因及修复方案

1. 命名空间导入错误

原代码中Imports.system写法错误,正确的命名空间导入应为Imports System(注意System首字母大写,且点号后无空格)。

2. OleDbCommand实例化语法错误

原代码Dim cmd As OleDbCommand(query,con)缺少New关键字,VB.NET中实例化对象必须使用New,正确写法:

Dim cmd As New OleDbCommand(query, con)

这是导致Identifier expected错误的核心原因。

3. 参数集合属性名称错误

cmd.Parameter.Addwithvalue中的Parameter应为复数Parameters,且Addwithvalue的标准写法是AddWithValue(驼峰命名),修正后:

cmd.Parameters.AddWithValue("@user", userTextBox1.Text)
cmd.Parameters.AddWithValue("@pass", passTextBox2.Text)

4. 登录逻辑错误

原代码中无论登录成功与否,都会同时弹出成功和失败的提示框,需添加Else分支区分逻辑:

If dr.HasRows Then
    MessageBox.Show("Login Successfully", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
    MessageBox.Show("Login Failed", "Failed", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If

5. 资源泄漏问题(优化建议)

原代码未手动关闭数据库连接和DataReader,建议使用Using语句自动释放资源,避免内存泄漏:

Using con As New OleDbConnection(connectionString)
    con.Open()
    ' ... 其他代码
    Using dr As OleDbDataReader = cmd.ExecuteReader()
        ' ... 读取逻辑
    End Using
End Using

6. 数据库路径空格问题

原路径中D: \repos有多余空格,建议修正为D:\repos避免路径识别异常。


修复后的完整代码

Imports System
Imports System.Data.OleDb
Imports System.Windows.Forms ' 需导入此命名空间使用MessageBox

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ' 修正数据库路径,移除多余空格
        Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\repos\LEARN WITH MUZII\LEARN WITH MUZII\DATA LOGIN.accdb"
        
        ' 使用Using自动释放连接资源
        Using con As New OleDbConnection(connectionString)
            con.Open()
            Dim query As String = "select * from Table1 where username=@user and password=@pass"
            
            ' 正确实例化OleDbCommand
            Dim cmd As New OleDbCommand(query, con)
            
            ' 使用正确的Parameters属性和AddWithValue方法
            cmd.Parameters.AddWithValue("@user", userTextBox1.Text)
            cmd.Parameters.AddWithValue("@pass", passTextBox2.Text)
            
            ' 使用Using自动释放DataReader资源
            Using dr As OleDbDataReader = cmd.ExecuteReader()
                If dr.HasRows Then
                    MessageBox.Show("Login Successfully", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Else
                    MessageBox.Show("Login Failed", "Failed", MessageBoxButtons.OK, MessageBoxIcon.Error)
                End If
            End Using
        End Using
    End Sub

    Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles passTextBox2.TextChanged

    End Sub

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles userTextBox1.TextChanged

    End Sub
End Class

内容的提问来源于stack exchange,提问作者MUZIIIEXTRA YT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:17:49