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

插入数据时触发SqlException:'StaffFirstname'附近存在语法错误

错误原因分析与修复方案

直接错误原因

你的SQL插入语句存在语法错误,导致抛出Incorrect syntax near 'StaffFirstname'异常,具体问题有两个:

  1. 不符合INSERT语句的标准结构:缺少列名的括号包裹和VALUES关键字,正确的INSERT语法应为INSERT INTO 表名(列1,列2...) VALUES(值1,值2...)
  2. INSERT语句不能使用WHERE子句:WHERE用于筛选已有数据(如UPDATE/DELETE操作),插入新行不需要该条件

修复方案

1. 先修正语法(临时解决,仍有安全风险)

将错误的SQL语句替换为符合语法规范的版本:

cmd.CommandText = "insert into Staff (StaffFirstname,StaffLastName,StaffAddress,StaffCity,StaffState,StaffPostCode,StaffPhoneNumber,StaffEmail) VALUES ('" + TxtStaffFirstName.Text + "','" + TxtStaffLastName.Text + "','" + TxtStaffAddress.Text + "','" + TxtStaffCity.Text + "','" + TxtStaffState.Text + "' ,'" + TxtStaffPostCode.Text + "','" + TxtStaffPhoneNumber.Text + "','" + TxtStaffEmail.Text + "')"

2. 推荐使用参数化查询(彻底解决安全与语法问题)

字符串拼接SQL存在SQL注入风险,且用户输入含特殊字符(如单引号)时会再次触发语法错误,建议改用参数化查询:

Private Sub BtnInsertData_Click(sender As Object, e As EventArgs) Handles BtnInsertData.Click
    If Con.State = ConnectionState.Open Then
        Con.Close()
    End If
    Con.Open()
    cmd = Con.CreateCommand()
    cmd.CommandType = CommandType.Text
    ' 参数化SQL语句
    cmd.CommandText = "insert into Staff (StaffFirstname,StaffLastName,StaffAddress,StaffCity,StaffState,StaffPostCode,StaffPhoneNumber,StaffEmail) VALUES (@FirstName,@LastName,@Address,@City,@State,@PostCode,@Phone,@Email)"
    ' 添加参数
    cmd.Parameters.AddWithValue("@FirstName", TxtStaffFirstName.Text)
    cmd.Parameters.AddWithValue("@LastName", TxtStaffLastName.Text)
    cmd.Parameters.AddWithValue("@Address", TxtStaffAddress.Text)
    cmd.Parameters.AddWithValue("@City", TxtStaffCity.Text)
    cmd.Parameters.AddWithValue("@State", TxtStaffState.Text)
    cmd.Parameters.AddWithValue("@PostCode", TxtStaffPostCode.Text)
    cmd.Parameters.AddWithValue("@Phone", TxtStaffPhoneNumber.Text)
    cmd.Parameters.AddWithValue("@Email", TxtStaffEmail.Text)
    
    cmd.ExecuteNonQuery()

    Disp_Data()

    ' 清空输入框(用Clear()更规范)
    TxtStaffFirstName.Clear()
    TxtStaffLastName.Clear()
    TxtStaffAddress.Clear()
    TxtStaffCity.Clear()
    TxtStaffState.Clear()
    TxtStaffPostCode.Clear()
    TxtStaffPhoneNumber.Clear()
    TxtStaffEmail.Clear()

    MessageBox.Show("Data inserted successfully")
End Sub

参数化查询的优势:

  • 彻底避免SQL注入攻击
  • 自动处理输入中的特殊字符,杜绝因用户输入导致的语法错误
  • 代码可读性与可维护性更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 01:40:14