【发布时间】:2016-06-17 23:50:11
【问题描述】:
我尝试编写的一些代码有问题。我正在为供应商订单做一些事情,所以我有一个名为“encomendas_fornecedores”的表,在作为销售代码的键之前有一个自动增量字段,它包含在数字之前的 EF 中(这是一个文本字段)。
代码如下:
connection.Open();
OleDbCommand comando1 = new OleDbCommand();
OleDbCommand comando2 = new OleDbCommand();
OleDbCommand comando3 = new OleDbCommand();
comando1.Connection = connection;
comando2.Connection = connection;
comando3.Connection = connection;
comando1.CommandText = "INSERT INTO encomendas_fornecedores (cod_encomenda_forn, cod_metodo, cod_forn, total_pagar_forn) VALUES('FO', '" + txtcodmetodo.Text + "', '" + txtcodforn.Text + "', '" + lbltotalapagar.Text + "'); ";// insert into table the values with a FO to cod
comando1.ExecuteNonQuery();
comando2.CommandText = "Select MAX(num_encomenda) From encomendas_fornecedores;";// selecting maximum num encomenda so I can isolate it and add to a text before(btw I do this in php/sql no problems
int numero = Convert.ToInt32(comando2.ExecuteScalar());//max num_encomenda
string codencomendaforn= "EF"+Convert.ToString(numero);// sales code completed
comando3.CommandText = "UPDATE encomendas_fornecedores SET cod_encomenda_forn = '"+codencomendaforn+"' WHERE num_encomenda = '"+ numero +"';";//query that is giving me the problems, it says something like "type of data incorrect in data expression"
comando3.ExecuteScalar();//giving me error this line
connection.Close();
但现在发现 cod_encomenda_forn 是文本,而 num_encomenda 自动递增,因为它在 sql 中,我尝试在文本框中显示查询以查看它是否有任何问题,但似乎没有任何问题。
【问题讨论】:
-
警告您的代码极易受到 sql 注入攻击
-
通常插入和更新失败,因为您没有在 SQL 中使用参数。当您不使用参数时,您将变量作为字符串传递,c# 中的驱动程序必须猜测类型并且经常出错。
-
将 ExecuteScalar() 更改为 ExecuteNonQuery()
-
SQL 参数将消除错误“类似于'数据类型不匹配'” 刻度不是所有用途的 SQL 分隔符,您正在使用它们将数字转换为字符串。
-
@DanielA.White 别担心,伙计,这当然是最后的结局,这甚至不是评估,所以不要担心