VB.NET中SQL Insert语句语法错误排查:同语句不同窗体表现异常
排查VB.NET中SQL Insert语句的语法错误问题
嘿,我一眼就揪出问题所在了!你仔细对比下报错和“正常运行”的SQL语句——报错的语句里,字段列表最后多了个多余的逗号!
看你提供的报错语句:
shop.MakeQuery("INSERT INTO Shop (Shop_ID,Shop_Name,Address,Postcode,) " & "VALUES (@ID,@Name,@Address,@Postcode)")
注意Postcode后面的那个逗号:Postcode,,这个末尾多余的逗号是SQL语法绝对不允许的。数据库解析器看到这个逗号,会默认后面还跟着一个列名,结果却直接遇到了右括号,自然就抛出语法错误了。
你说另一个窗体的相同语句能正常运行,大概率是你描述时的笔误——那个正常运行的语句实际上是没有这个多余逗号的,正确的写法应该是这样:
shop.MakeQuery("INSERT INTO Shop (Shop_ID,Shop_Name,Address,Postcode) " & "VALUES (@ID,@Name,@Address,@Postcode)")
修正方案
只需要把字段列表里最后那个多余的逗号删掉就行,修正后的完整代码如下:
shop.MakeQuery("INSERT INTO Shop (Shop_ID,Shop_Name,Address,Postcode) " & "VALUES (@ID,@Name,@Address,@Postcode)")
小建议
虽然有些数据库新版本开始支持列列表末尾加逗号,但大部分主流数据库(比如SQL Server、MySQL等)的传统语法是不认可这种写法的。为了避免这类低级错误,写SQL时可以养成一个小习惯:把每个列名单独换行写,这样多余的逗号一眼就能发现,比如:
INSERT INTO Shop ( Shop_ID, Shop_Name, Address, Postcode ) VALUES ( @ID, @Name, @Address, @Postcode )
另外,你已经在用参数化查询了,这点特别棒,能有效避免SQL注入问题,继续保持!
内容的提问来源于stack exchange,提问作者the real swifty
相关产品推荐
相关产品推荐

