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

图书馆系统项目btnUpdate_Click报错:查询表达式逗号语法错误

问题解决思路

核心错误分析

你的btnUpdate_Click事件里的SQL Update语句犯了两个致命错误:

  1. 语法逻辑完全颠倒:
    Update语句的正确格式是:
    UPDATE 表名 SET 字段1=新值1, 字段2=新值2,... WHERE 筛选条件
    
    你现在把要修改的字段(Title、Author等)都放到了WHERE子句里,反而把ISBN当成了要修改的字段,这完全搞反了业务逻辑(应该是根据ISBN或唯一标识找到目标图书,再修改它的标题、作者等信息)。
  2. 拼写错误:Ttile是笔误,正确字段名是Title。

修正后的代码

第一步:先修正SQL语法逻辑

假设你要通过ISBN定位图书,再修改它的其他信息,正确的SQL写法如下:

Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
    cmd = conn.CreateCommand()
    conn.Open()
    cmd.CommandType = CommandType.Text
    ' 把要修改的字段放到SET后,WHERE用ISBN定位目标记录
    cmd.CommandText = "Update Books set Title = '" + TextBox11.Text + "', Author = '" + TextBox10.Text + "', Production = '" + TextBox9.Text + "', Category = '" + TextBox8.Text + "', Year = '" + TextBox7.Text + "' where ISBN = '" + TextBox12.Text + "'"
    cmd.ExecuteNonQuery()
    conn.Close()
    btnSearch_Click(New Object, New EventArgs())
    view()
End Sub

第二步:改用参数化查询(强烈推荐)

字符串拼接SQL容易因为输入含单引号报错,还存在SQL注入风险,换成参数化写法更安全可靠:

Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
    Using conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\msi\Desktop\UITM\DIPLOMA CS110\SEM 3\CSC301\groupproject\ReadObrite\ReadObrite\User.accdb")
        conn.Open()
        Dim cmdText As String = "Update Books set Title = @Title, Author = @Author, Production = @Production, Category = @Category, Year = @Year where ISBN = @ISBN"
        Using cmd As New OleDbCommand(cmdText, conn)
            ' 添加参数绑定
            cmd.Parameters.AddWithValue("@ISBN", TextBox12.Text)
            cmd.Parameters.AddWithValue("@Title", TextBox11.Text)
            cmd.Parameters.AddWithValue("@Author", TextBox10.Text)
            cmd.Parameters.AddWithValue("@Production", TextBox9.Text)
            cmd.Parameters.AddWithValue("@Category", TextBox8.Text)
            cmd.Parameters.AddWithValue("@Year", TextBox7.Text)
            cmd.ExecuteNonQuery()
        End Using
    End Using
    btnSearch_Click(New Object, New EventArgs())
    view()
End Sub

其他代码小提示

  1. view()方法和BookDetails_Load里重复执行了DataTable填充逻辑,且全局变量dt多次填充会导致数据重复,建议每次填充前先清空:dt.Clear(),或者每次创建新的DataTable。
  2. btnSearch_Click里不需要调用cmd.ExecuteNonQuery(),直接用DataAdapter的Fill方法即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:50:42