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

SQL异常求助:System.Data.SqlClient.SqlException:Incorrect syntax near 'Information'

解决VB.NET SQL插入操作的语法错误问题

咱们先从你遇到的核心错误说起:System.Data.SqlClient.SqlException: Incorrect syntax near 'Information',这个问题的根源很明确——你的表名Patient Information包含空格,SQL Server解析时会把Patient当成表名,Information当成额外的语法元素,自然就报错了。下面一步步帮你解决所有问题:

1. 给带空格的表名和列名加包裹

SQL Server要求包含空格或特殊字符的标识符(表名、列名)必须用方括号[]包裹起来。你的表名Patient Information,还有列名Patient ID、First Visit、Last Visit都带空格,所以要修改SQL语句的结构:

INSERT INTO [Patient Information] (F_Name, L_Name, [Patient ID], Disease, [First Visit], [Last Visit]) ...

2. 移除INSERT语句里多余的逗号

看你代码里的Insertquery,VALUES列表的最后一个值后面多了个逗号:

' 原代码里的错误写法
..., ' " & TextBox7.Text & " ' ,)"

把这个多余的逗号删掉,改成:

..., ' " & TextBox7.Text & " ' )"

这个小细节也会引发SQL语法错误,别忽略它。

3. 替换字符串拼接为参数化查询(必须改的安全问题)

直接把TextBox的内容拼到SQL语句里是非常危险的——不仅容易因为用户输入单引号(比如名字O'Neil)触发语法错误,还会被SQL注入攻击。用参数化查询能一次性解决这两个问题,重构你的代码:

先修改Executequery方法,用Using语句自动管理资源(避免连接泄漏):

Public Sub Executequery(query As String, parameters As SqlParameterCollection)
    Using connection As New SqlConnection("Server=TAYYAB-PC\SQLEXPRESS;Database=Hospital Management;User=sa;Pwd=Password1;")
        Using command As New SqlCommand(query, connection)
            If parameters IsNot Nothing Then
                command.Parameters.AddRange(parameters.ToArray())
            End If
            connection.Open()
            command.ExecuteNonQuery()
        End Using
    End Using
End Sub

然后修改Button点击事件,用参数代替直接拼接:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ' 用@占位符标记参数位置
    Dim Insertquery As String = "INSERT INTO [Patient Information] (F_Name, L_Name, [Patient ID], Disease, [First Visit], [Last Visit]) VALUES (@FName, @LName, @PatientID, @Disease, @FirstVisit, @LastVisit)"
    
    ' 创建参数集合,绑定输入框内容
    Dim parameters As New SqlParameterCollection()
    parameters.Add(New SqlParameter("@FName", TextBox2.Text))
    parameters.Add(New SqlParameter("@LName", TextBox3.Text))
    parameters.Add(New SqlParameter("@PatientID", TextBox4.Text))
    parameters.Add(New SqlParameter("@Disease", TextBox5.Text))
    parameters.Add(New SqlParameter("@FirstVisit", TextBox6.Text))
    parameters.Add(New SqlParameter("@LastVisit", TextBox7.Text))
    
    Try
        Executequery(Insertquery, parameters)
        MsgBox("Data Inserted")
    Catch ex As Exception
        ' 捕获异常,方便调试
        MsgBox($"插入失败:{ex.Message}")
    End Try
End Sub

4. 修正连接字符串的冲突

你的连接字符串同时用了Integrated Security=True(Windows身份验证)和User=sa;Pwd=Password1(SQL身份验证),这两个是互斥的,只能二选一:

  • 用SQL身份验证:去掉Integrated Security=True;Trusted_Connection=True;,保留User=sa;Pwd=Password1;
  • 用Windows身份验证:去掉User=sa;Pwd=Password1;,保留Integrated Security=True;

额外提醒

  • 以后永远不要直接拼接用户输入到SQL语句里,参数化是行业标准
  • 用Using语句管理数据库连接和命令,确保资源被自动释放,避免内存泄漏
  • 加上异常捕获,能帮你快速定位问题,也能给用户更友好的提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:14:33