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
相关产品推荐
相关产品推荐

