【发布时间】: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