【问题标题】:Setting SQL query parameter to Int32 in C#在 C# 中将 SQL 查询参数设置为 Int32
【发布时间】: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 别担心,伙计,这当然是最后的结局,这甚至不是评估,所以不要担心

标签: c# sql ms-access


【解决方案1】:
"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"

您正在将字符串 numero 传递给似乎需要一个数字的 where 语句。只要它是数字,它就应该工作,但绝对不能保证工作。其次,您将 anothercodencomendaforn 字符串传递给 encomenda encomenda 的数据类型是什么?

您似乎没有处理 C# 代码和 SQL 查询之间潜在的数据类型差异。此外,在 SQL 语句中的值周围单引号 '' 告诉数据库引擎它是一个字符串,即使它是 '1234'。虽然 SQL 会自动转换某些值,但并非总是如此。此外,c# .net 库还在发送 SQL 语句之前寻找一些转换等。要适当地修复,请使用数据类型为 SQL 表中的数据库类型的参数。要在语句中简单地修复它,请找出您的数据类型并适当地修复 '' 单引号。

PS 那些试图在 cmets 中帮助你的人很友善,并告诉你在解决此问题后毕业时如何专业地保住你的工作。

【讨论】:

  • 我正在传递一个 int I? cod_encomenda_forn 是文本 (EF22) 是我尝试赋予它的值的示例,num_encomenda 是自动增量。我会尝试这样做。我知道他们是,如果我对他们很粗鲁,我很抱歉,那不是我的意图,但我不会跟随这个地区去我的大学
猜你喜欢
  • 1970-01-01
  • 2020-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多