C# WinForm含78个单选按钮的问卷MySQL INSERT/UPDATE语法问题
解决MySQL INSERT ... ON DUPLICATE KEY UPDATE语法错误及优化建议
先直接点出你遇到的核心问题:你的ON DUPLICATE KEY UPDATE子句后面是空的,MySQL解析到这里时找不到要执行的更新逻辑,这就是抛出"Error in SQL syntax near '' at line 1"的直接原因。
接下来我们一步步修复问题,同时解决代码里的其他隐患:
1. 必须明确指定INSERT的列名
你当前的INSERT语句没有列出目标列,这非常危险:如果表的列顺序变化、新增/删除列,语句会直接失败,而且可读性极差。一定要写出要插入的列名,和VALUES里的顺序严格一一对应。
2. 完善ON DUPLICATE KEY UPDATE逻辑
既然要支持更新操作,你需要在这个子句里明确写出每个列要更新的值。比如当主键/唯一键重复时,把其他列更新为当前提交的最新值。
3. 替换字符串拼接,使用参数化查询
直接把控件文本拼到SQL里,不仅容易因为用户输入的单引号等特殊字符破坏语法,还存在严重的SQL注入风险。改用参数化查询是操作数据库的最佳实践。
修复后的完整代码示例
using (MySqlConnection conn = new MySqlConnection("你的数据库连接字符串")) { conn.Open(); // 替换为你的azt_image表真实列名,这里是根据VALUES顺序推测的名称 string sql = @"INSERT INTO central_db.azt_image (serial, cust_dfe, eng_img, serial_dup, asset_loc, asset_name, img_l1_pend, img_l2_pend, img_l3_pend, img_l4_pend, img_l5_pend, img_l6_pend, img_l7_pend, img_l8_pend, img_l9_pend, img_l10_pend, img_l11_pend, img_l12_pend, img_l13_pend, img_l14_pend, img_l15_pend, img_l16_pend, img_l17_pend, img_l18_pend, img_l19_pend, img_l20_pend, img_l21_pend, img_l22_pend, img_l23_pend, img_l24_pend, img_l25_pend, img_l26_pend, img_l1_na, img_l2_na, img_l3_na, img_l4_na, img_l5_na, img_l6_na, img_l7_na, img_l8_na, img_l9_na, img_l10_na, img_l11_na, img_l12_na, img_l13_na, img_l14_na, img_l15_na, img_l16_na, img_l17_na, img_l18_na, img_l19_na, img_l20_na, img_l21_na, img_l22_na, img_l23_na, img_l24_na, img_l25_na, img_l26_na, img_l1_comp, img_l2_comp, img_l3_comp, img_l4_comp, img_l5_comp, img_l6_comp, img_l7_comp, img_l8_comp, img_l9_comp, img_l10_comp, img_l11_comp, img_l12_comp, img_l13_comp, img_l14_comp, img_l15_comp, img_l16_comp, img_l17_comp, img_l18_comp, img_l19_comp, img_l20_comp, img_l21_comp, img_l22_comp, img_l23_comp, img_l24_comp, img_l25_comp, img_l26_comp, img_note) VALUES (@Serial, @CustDfe, @EngImg, @SerialDup, @AssetLoc, @AssetName, @ImgL1Pend, @ImgL2Pend, @ImgL3Pend, @ImgL4Pend, @ImgL5Pend, @ImgL6Pend, @ImgL7Pend, @ImgL8Pend, @ImgL9Pend, @ImgL10Pend, @ImgL11Pend, @ImgL12Pend, @ImgL13Pend, @ImgL14Pend, @ImgL15Pend, @ImgL16Pend, @ImgL17Pend, @ImgL18Pend, @ImgL19Pend, @ImgL20Pend, @ImgL21Pend, @ImgL22Pend, @ImgL23Pend, @ImgL24Pend, @ImgL25Pend, @ImgL26Pend, @ImgL1NA, @ImgL2NA, @ImgL3NA, @ImgL4NA, @ImgL5NA, @ImgL6NA, @ImgL7NA, @ImgL8NA, @ImgL9NA, @ImgL10NA, @ImgL11NA, @ImgL12NA, @ImgL13NA, @ImgL14NA, @ImgL15NA, @ImgL16NA, @ImgL17NA, @ImgL18NA, @ImgL19NA, @ImgL20NA, @ImgL21NA, @ImgL22NA, @ImgL23NA, @ImgL24NA, @ImgL25NA, @ImgL26NA, @ImgL1Comp, @ImgL2Comp, @ImgL3Comp, @ImgL4Comp, @ImgL5Comp, @ImgL6Comp, @ImgL7Comp, @ImgL8Comp, @ImgL9Comp, @ImgL10Comp, @ImgL11Comp, @ImgL12Comp, @ImgL13Comp, @ImgL14Comp, @ImgL15Comp, @ImgL16Comp, @ImgL17Comp, @ImgL18Comp, @ImgL19Comp, @ImgL20Comp, @ImgL21Comp, @ImgL22Comp, @ImgL23Comp, @ImgL24Comp, @ImgL25Comp, @ImgL26Comp, @ImgNote) ON DUPLICATE KEY UPDATE cust_dfe = @CustDfe, eng_img = @EngImg, asset_loc = @AssetLoc, asset_name = @AssetName, img_l1_pend = @ImgL1Pend, img_l2_pend = @ImgL2Pend, img_l3_pend = @ImgL3Pend, img_l4_pend = @ImgL4Pend, img_l5_pend = @ImgL5Pend, img_l6_pend = @ImgL6Pend, img_l7_pend = @ImgL7Pend, img_l8_pend = @ImgL8Pend, img_l9_pend = @ImgL9Pend, img_l10_pend = @ImgL10Pend, img_l11_pend = @ImgL11Pend, img_l12_pend = @ImgL12Pend, img_l13_pend = @ImgL13Pend, img_l14_pend = @ImgL14Pend, img_l15_pend = @ImgL15Pend, img_l16_pend = @ImgL16Pend, img_l17_pend = @ImgL17Pend, img_l18_pend = @ImgL18Pend, img_l19_pend = @ImgL19Pend, img_l20_pend = @ImgL20Pend, img_l21_pend = @ImgL21Pend, img_l22_pend = @ImgL22Pend, img_l23_pend = @ImgL23Pend, img_l24_pend = @ImgL24Pend, img_l25_pend = @ImgL25Pend, img_l26_pend = @ImgL26Pend, img_l1_na = @ImgL1NA, img_l2_na = @ImgL2NA, img_l3_na = @ImgL3NA, img_l4_na = @ImgL4NA, img_l5_na = @ImgL5NA, img_l6_na = @ImgL6NA, img_l7_na = @ImgL7NA, img_l8_na = @ImgL8NA, img_l9_na = @ImgL9NA, img_l10_na = @ImgL10NA, img_l11_na = @ImgL11NA, img_l12_na = @ImgL12NA, img_l13_na = @ImgL13NA, img_l14_na = @ImgL14NA, img_l15_na = @ImgL15NA, img_l16_na = @ImgL16NA, img_l17_na = @ImgL17NA, img_l18_na = @ImgL18NA, img_l19_na = @ImgL19NA, img_l20_na = @ImgL20NA, img_l21_na = @ImgL21NA, img_l22_na = @ImgL22NA, img_l23_na = @ImgL23NA, img_l24_na = @ImgL24NA, img_l25_na = @ImgL25NA, img_l26_na = @ImgL26NA, img_l1_comp = @ImgL1Comp, img_l2_comp = @ImgL2Comp, img_l3_comp = @ImgL3Comp, img_l4_comp = @ImgL4Comp, img_l5_comp = @ImgL5Comp, img_l6_comp = @ImgL6Comp, img_l7_comp = @ImgL7Comp, img_l8_comp = @ImgL8Comp, img_l9_comp = @ImgL9Comp, img_l10_comp = @ImgL10Comp, img_l11_comp = @ImgL11Comp, img_l12_comp = @ImgL12Comp, img_l13_comp = @ImgL13Comp, img_l14_comp = @ImgL14Comp, img_l15_comp = @ImgL15Comp, img_l16_comp = @ImgL16Comp, img_l17_comp = @ImgL17Comp, img_l18_comp = @ImgL18Comp, img_l19_comp = @ImgL19Comp, img_l20_comp = @ImgL20Comp, img_l21_comp = @ImgL21Comp, img_l22_comp = @ImgL22Comp, img_l23_comp = @ImgL23Comp, img_l24_comp = @ImgL24Comp, img_l25_comp = @ImgL25Comp, img_l26_comp = @ImgL26Comp, img_note = @ImgNote"; using (MySqlCommand cmd = new MySqlCommand(sql, conn)) { // 绑定参数,确保和SQL中的@占位符一一对应 cmd.Parameters.AddWithValue("@Serial", SerialCombo.Text); cmd.Parameters.AddWithValue("@CustDfe", Global.cust_dfe); cmd.Parameters.AddWithValue("@EngImg", EngImgcomboBx.Text); cmd.Parameters.AddWithValue("@SerialDup", SerialCombo.Text); cmd.Parameters.AddWithValue("@AssetLoc", AssetLocTxtBx.Text); cmd.Parameters.AddWithValue("@AssetName", AssetNameTxtBx.Text); // 单选按钮状态参数 cmd.Parameters.AddWithValue("@ImgL1Pend", ImgL1Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL2Pend", ImgL2Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL3Pend", ImgL3Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL4Pend", ImgL4Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL5Pend", ImgL5Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL6Pend", ImgL6Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL7Pend", ImgL7Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL8Pend", ImgL8Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL9Pend", ImgL9Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL10Pend", ImgL10Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL11Pend", ImgL11Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL12Pend", ImgL12Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL13Pend", ImgL13Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL14Pend", ImgL14Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL15Pend", ImgL15Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL16Pend", ImgL16Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL17Pend", ImgL17Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL18Pend", ImgL18Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL19Pend", ImgL19Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL20Pend", ImgL20Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL21Pend", ImgL21Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL22Pend", ImgL22Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL23Pend", ImgL23Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL24Pend", ImgL24Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL25Pend", ImgL25Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL26Pend", ImgL26Pend.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL1NA", ImgL1NA.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL2NA", ImgL2NA.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL3NA", ImgL3NA.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL4NA", ImgL4NA.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL5NA", ImgL5NA.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL6NA", ImgL6NA.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL7NA", ImgL7NA.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL8NA", ImgL8NA.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL9NA", ImgL9NA.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL10NA", ImgL10NA.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL11NA", ImgL11NA.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL12NA", ImgL12NA.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL13NA", ImgL13NA.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL14NA", ImgL14NA.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL15NA", ImgL15NA.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL16NA", ImgL16NA.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL17NA", ImgL17NA.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL18NA", ImgL18NA.Checked ? 1 : 0); cmd.Parameters.AddWithValue("@ImgL19
相关产品推荐
相关产品推荐

