【问题标题】:C# SQL Server: Query that use a numeric string in a where clause does not work properlyC# SQL Server:在 where 子句中使用数字字符串的查询无法正常工作
【发布时间】:2018-01-26 07:58:35
【问题描述】:

我有一个 RES_LOCALIZADOR 列,它是一个数字字符串。但它应该是一个 bigint。

当执行这个查询时,虽然它没有失败,但它没有返回任何应该返回的值。我添加了 CAST 函数来防止我之前遇到的错误(varchar 值的转换溢出了 sql server 中的 int 列)

            var str = new StringBuilder();
        str.AppendLine(" SELECT WEB_codigo ");
        str.AppendLine(" FROM[intranetMinorista].[dbo].[RESERVA] R WITH(NOLOCK) ");
        long value = 206627660;
        str.AppendFormat(" WHERE CAST(RES_LOCALIZADOR AS BIGINT)=" +value);

有什么帮助吗?

谢谢

【问题讨论】:

  • 你应该使用参数化。见here。它不仅可以防止 sql 注入,还可以更好地处理数据类型。您是否尝试在 SSMS 中执行查询?
  • 尽管参数很好,而且我怀疑它们会在这种特定情况下改善情况...long.ToString() 不是注入代码的典型生产者。我也会对 SSMS 结果感兴趣。我没有太多使用 SQL 服务器...在 FROM 之后没有空格的 FROM[intranetMinorista] 是否合法?
  • 如果您从 [intranetMinorista].[dbo].[RESERVA] 中选择数据“select web_codigo, CAST(RES_LOCALIZADOR AS BIGINT)”会发生什么情况?
  • 感谢您的回答,我已更改为使用 parametrizacion 但仍然无法正常工作。 SSMS 结果没问题,它返回了我期望的值。
  • @grek40 嗨,格雷格,我刚刚提出了遇到问题的查询。它们在 SSMS 上工作,但在从代码执行时不工作

标签: c# sql-server


【解决方案1】:

从 [intranetMinorista].[dbo].[RESERVA] 选择 WEB_codigo,其中 RES_localizador = 206627660

RES_localizador 是 BDDD 中的 VARCHAR

当列是 BIGINT 类型时,我也遇到了问题 从 [intranetMinorista].[dbo].[RESERVA] 选择 WEB_codigo,其中 RES_CODIGO = 20946346

Res_codigo 是 BBDD 中的一个 bigint

【讨论】:

  • 请编辑您的问题以添加信息,新信息不应该是评论,更不是答案。什么是 BDDD/BBDD?
猜你喜欢
  • 2018-03-06
  • 2022-01-22
  • 2019-11-04
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多