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

VB.NET向SQL Server插入数据失败求助

嘿,我看了你的代码,发现几个关键问题导致插入失败,咱们一个个来解决:

1. 直接的SQL语法错误

你的INSERT语句里有两个一眼就能看到的语法问题:

  • Width和Hight之间少了逗号,这会直接让SQL Server解析语句时崩溃
  • 像Kg/Units、Area/m2这类包含特殊字符(/)的字段名,必须用方括号[]括起来,SQL Server才能正确识别;另外Hight大概率是拼写错误,应该是Height吧?

原语句的错误片段:

insert into prod (poductID, Name, Type, Kg/Units, Length, Width Hight, Area/m2)

修正后(补逗号、加方括号、修正拼写):

insert into prod (poductID, Name, Type, [Kg/Units], Length, Width, Height, [Area/m2])
2. 致命的SQL注入风险(同时也是潜在的失败诱因)

你现在用字符串拼接生成SQL语句的方式,不仅会因为输入内容包含单引号(比如用户输入O'Neil)直接导致语句崩溃,还会带来极高的SQL注入漏洞风险——这绝对是SQL操作的大忌,必须改用参数化查询,这也是行业通用的最佳实践。

修正后的完整代码

下面给你改成参数化查询的版本,同时修复了所有语法问题:

Private Sub Button12_Click(sender As Object, e As EventArgs) Handles save.Click
    Try
        ' 用Using块自动释放资源,避免连接泄漏
        Using conn As New SqlConnection("你的数据库连接字符串")
            conn.Open()
            ' 参数化SQL,字段名用方括号处理特殊字符
            Dim cmdText As String = "INSERT INTO prod (poductID, Name, Type, [Kg/Units], Length, Width, Height, [Area/m2]) 
                                     VALUES (@ProductID, @Name, @Type, @KgUnits, @Length, @Width, @Height, @Area)"
            
            Using cmd As New SqlCommand(cmdText, conn)
                ' 逐个添加参数,绑定输入控件的值
                cmd.Parameters.AddWithValue("@ProductID", id.Text)
                cmd.Parameters.AddWithValue("@Name", pdt.Text)
                cmd.Parameters.AddWithValue("@Type", type.Text)
                cmd.Parameters.AddWithValue("@KgUnits", kg.Text)
                cmd.Parameters.AddWithValue("@Length", lg.Text)
                cmd.Parameters.AddWithValue("@Width", wdt.Text)
                cmd.Parameters.AddWithValue("@Height", ht.Text)
                cmd.Parameters.AddWithValue("@Area", ' 这里你原来的代码截断了,补全对应的控件,比如area.Text)
                
                ' 执行插入并返回受影响行数
                Dim rowsAffected As Integer = cmd.ExecuteNonQuery()
                If rowsAffected > 0 Then
                    MessageBox.Show("数据插入成功!")
                Else
                    MessageBox.Show("未插入任何数据,请检查输入内容是否符合要求。")
                End If
            End Using
        End Using
    Catch ex As Exception
        ' 捕获异常并显示具体信息,方便排查问题
        MessageBox.Show("插入失败:" & ex.Message)
    End Try
End Sub
额外提醒
  • 确保你的数据库连接字符串是正确的,conn对象初始化没有问题
  • 检查输入控件的值是否匹配数据库表的字段类型(比如Length如果是数值类型,不能输入非数字内容,这时候可以指定参数类型,比如cmd.Parameters.Add("@Length", SqlDbType.Float).Value = Convert.ToSingle(lg.Text))
  • 原代码里的poductID是不是拼写错误?如果数据库字段名是ProductID,这里也要同步修正,否则会提示找不到字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:23:09