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

C#执行MySQL INSERT INTO SELECT语句指定固定值异常如何解决?

MySQL INSERT...SELECT语句在C#中执行时字段赋值异常问题

我在使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:06:04