首页 > 解决方案 > 一起使用 INSERT INTO SELECT & VALUES

问题描述

我在使用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 但仍然无法正常工作 - 不太相信 C# 无法处理显示格式化程序,我不太相信让它成为varchar 失败(除非它是 varchar(1) 并且您以某种方式没有收到截断错误?) - 您能否将它的一些屏幕截图显示为 varchar“不工作”?

在截屏时,我刚刚意识到:它并不总是“1”,它正在获取“insumos_da_venda_temp”第一列的值,这甚至不在代码中,所以我不知道发生了什么

这里有一些截图: https ://imgur.com/a/1iaHrj2

编辑2:

3天解决这个问题,我终于成功了。

我信任@CaiusJard,他说它应该可以工作,然后我决定找出它不工作的任何其他原因。

事实是,100% 是我的错误,我正在做的是:将所有内容从“insumos_da_venda_temp”选项卡中转移出来,然后尝试从那里插入“insumos_da_venda”选项卡,因为它什么都没有,我认为有些东西发疯了,它正在插入数据那甚至不在那里。

谢谢大家的回复,你们每个人都帮了我很多,不仅在这个问题上,还教我一些mysql

标签: c#mysql

解决方案


您正在尝试将 vendacod 作为字符串插入,但它是一个整数列( int(5) )。尝试将 vendacod 添加为整数参数

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;";

    var cmd = new MySqlCommand(insertInsumosVenda, BDconnection);
   cmd.CommandType = CommandType.Text;
     cmd.Parameters.Add("@vendacod", MySqlDbType.Int32).Value = vendacod;
    cmd.conection.Open();
   var result= cmd.ExecuteNonQuery();
    cmd.connection.Close();


推荐阅读