.NET 4.8 VB.NET插入Access表报错:语法错误/自增字段值遗漏
VB.NET 插入Access数据库报错的解决方案
问题1:INSERT INTO语句语法错误
原因
PASSWORD是Access数据库的保留关键字,直接作为字段名使用会导致SQL语法解析失败。
解决办法
在SQL语句中将PASSWORD字段名用方括号[]包裹,修改后的INSERT语句如下:
cmd.CommandText = "INSERT INTO USERS(EMAIL,[PASSWORD],DESIGNATION) VALUES(@Email,@Password,@Designation)"
问题2:自增字段USERID省略时提示“缺少值”
原因
USERS表中USERID字段的自增属性未正确配置,或者字段被设置为必填但未启用自动编号机制。
解决办法
- 打开Access数据库,找到USERS表的设计视图
- 选中USERID字段,将其数据类型设置为“自动编号”
- 确认该字段的“必填”属性为“否”,“索引”属性设为“有(无重复)”(保证自增ID的唯一性)
额外代码修正细节
- 连接字符串格式错误:原代码中
DataSource应为Data Source(带空格),修正后:
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\ISIOLO.accdb"
- 资源泄漏优化:建议用
Using语句自动释放数据库连接和命令对象,避免手动关闭可能出现的资源泄漏:
Private Sub BtnCreate_Click(sender As Object, e As EventArgs) Handles BtnCreate.Click Using conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\ISIOLO.accdb") conn.Open() Using cmd As OleDbCommand = conn.CreateCommand() cmd.CommandType = CommandType.Text cmd.CommandText = "INSERT INTO USERS(EMAIL,[PASSWORD],DESIGNATION) VALUES(@Email,@Password,@Designation)" cmd.Parameters.AddWithValue("@Email", TxtEmail.Text) cmd.Parameters.AddWithValue("@Password", TxtPassword.Text) cmd.Parameters.AddWithValue("@Designation", ComboDesignation.Text) Try cmd.ExecuteNonQuery() MessageBox.Show("操作成功") PnlCreateAccount.Visible = False Catch ex As Exception MessageBox.Show(ex.Message) End Try End Using End Using End Sub
内容的提问来源于stack exchange,提问作者EDRICK
相关产品推荐
相关产品推荐

