一起使用插入到选择和值一起

  • 本文关键字:一起 选择 插入 c# mysql
  • 更新时间 :
  • 英文 :


我在使用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,仍然没有工作。

我见过一些类似的问题,但没有一个适合我,我不知道为什么。

Edit1:

应该使用参数化查询。您的代码容易受到攻击SQL注入

我知道这是一个相当糟糕的代码,我做这个程序只是为了学习的目的,现在我只学习c#,之后我会升级我的MySQL技能,谢谢你的提示

vendacod列是int(5),但我也尝试将其更改为varchar并且仍然不能工作——我不能完全相信c#不能处理显示格式化器,我不太相信把它变成一个varchar失败(除非它是varchar(1),并且不知何故没有得到a)截断错误?)-你能给我一些屏幕截图吗?作为一个varchar?

在截图的时候我才意识到:它并不总是'1',它正在获取" insummos_da_venda_temp "的第一列的值这甚至不在代码中,所以我不知道发生了什么

下面是一些截图:https://i.stack.imgur.com/JRfNf.jpg

Edit2:

3天的工作,我终于使它工作。

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

事实是,100%是我的错,我所做的是:把所有的东西都转移到insummos_da_venda_temp "TAB然后尝试插入到insumos_da_venda"TAB,因为它什么都没有,我想是什么东西疯了,它插入了根本不存在的数据。

谢谢你们的回复,你们每个人都帮了我很多,不仅在这个问题上,而且还教了我一些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();

我真的不知道为什么你有这个问题,但你可以尝试使用MySqlParameter,您可以在这里阅读更多内容:https://dev.mysql.com/doc/dev/connector-net/8.0/html/P_MySql_Data_MySqlClient_MySqlCommand_Parameters.htm.

无论如何,实现是这样的:

MySqlParameter p1= new MySqlParameter("@vendacod",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;";

MySqlCommand insertInsumosVendaCmd = new MySqlCommand(insertInsumosVenda, BDconnection);

insertInsumosVendaCmd.Parameters.Add(p1);

InsertInsumosVendaCmd.ExecuteNonQuery();

最新更新