【问题标题】:When I try to send data from one table to another gives me error当我尝试将数据从一个表发送到另一个表时出现错误
【发布时间】:2022-12-03 01:35:25
【问题描述】:

下午好,我正在尝试将数据插入到来自另一个表的表中,如下所示:

decimal saldo = getDbSaldo($@"SELECT Balance FROM clients WHERE Pin='{pin}' AND CardNumber = '{numeroCartao}'");
insertExtrato($@"insert into  MoveInfo (CardNumber, Deposit, Saldo, Withdraw, DataHora) Values({numeroCartao}, {deposit}, {saldo}, {withdraw}, getDate())");

数据到达那里:

但是当我让它工作时,它总是给我这个错误:

我已经坚持了两天了。

【问题讨论】:

  • 您正在执行的 SQL 命令的实际运行时值是多少?请注意,以这种方式将字符串组合在一起以构建 SQL 命令是一个 SQL 注入漏洞。您应该改用查询参数。
  • 如果您使用参数而不是连接字符串,您可能永远不会遇到此错误。现在请告诉我们用于 INSERT INTO 语句的变量中存在哪些值
  • 但问题可能是 SQL 注入? @大卫
  • @EmanuelSantos:当然可以,是的。如果你不控制你的 SQL 代码的语法,并允许它从任何东西构建,那么 SQL 代码可能是有效的,可能是无效的,可能是恶意的,可能是任何东西。
  • 假设萨尔多10.42.如果将十进制值转换为字符串返回逗号而不是点,您认为会发生什么情况?

标签: c# database


【解决方案1】:

你忘了放数字卡陶在引号中。我从 select 语句中假设卡号不是数字。

'{numeroCartao}'

insertExtrato($@"insert into  MoveInfo (CardNumber, Deposit, Saldo, Withdraw, DataHora) Values('{numeroCartao}', {deposit}, {saldo}, {withdraw}, getDate())");

【讨论】:

  • 首先使用查询参数会使问题变得毫无意义。
  • 那是真实的。但是 OP 没有要求最佳实践。这个问题的 cmets 中有很多。我发现有时只回答所问的问题会很有帮助。
  • 我试过了,没用
  • 我想我需要将格式更改为使用十进制数。并不是 ,
猜你喜欢
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 2018-01-22
  • 1970-01-01
  • 1970-01-01
  • 2022-08-07
相关资源
最近更新 更多