C#执行MySQL INSERT INTO SELECT语句指定固定值异常如何解决?
我在使用INSERT INTO语句插入另一张表的数据外加一个自定义变量值时遇到了问题。
仅在MySQL环境中运行以下查询完全正常:
INSERT INTO insumos_da_venda (vendacod, insumocod, nome, quantidade, unidmedida, preco) SELECT '11' AS vendacod , cod , nome , quantidade , unidmedida , preco FROM insumos_da_venda_temp
但当我把这段逻辑放到C#代码中运行时,原本填'11'的位置无论放什么值,最终插入结果都变成了'1'。不管填写变量、随机值甚至留空,执行命令后该字段值始终是'1'。
对应的C#代码如下:
string insertInsumosVenda = "INSERT INTO insumos_da_venda (vendacod, insumocod, nome, quantidade, unidmedida, preco) SELECT '" + vendacod + "' AS vendacod, cod, nome, quantidade, unidmedida, preco FROM insumos_da_venda_temp;"; MySqlCommand insertInsumosVendaCmd = new MySqlCommand(insertInsumosVenda, BDconnection); reader = insertInsumosVendaCmd.ExecuteReader(); while (reader.Read()) { } reader.Close();
其中变量vendacod的取值范围是0到99999。
vendacod字段原本是int(5)类型,我尝试改成varchar类型后问题依然存在。我搜索过同类问题但给出的解决方案都不生效,完全不知道问题出在哪里。
补充1
你应该使用参数化查询,当前代码存在SQL注入风险。
我知道这段代码写得不够规范,这个程序只是用来学习C#的,之后我会补全MySQL相关技能,感谢提醒。
vendacod字段是int(5),改成varchar还不生效有点奇怪,除非你设的是varchar(1)还没触发截断报错?可以提供问题复现的截图吗?
我准备截图的时候才发现:插入的值不是固定为'1',而是取了insumos_da_venda_temp表第一列的值,这列我根本没在查询语句里引用,完全不知道为什么会出现这个情况。
补充2
排查了3天终于解决了问题。我相信@CaiusJard说的语句本身是正常的,所以从其他方向找原因,最后发现完全是我自己的失误:我先把insumos_da_venda_temp表的所有数据转移走了,再执行从该表查询插入的逻辑,表为空导致逻辑异常,才插入了不符合预期的数据。
感谢大家的回复,各位的回答不仅帮我解决了这个问题,也让我学到了不少MySQL相关知识。
内容的提问来源于stack exchange,提问作者LucOliSil

