-2

我一直在用 C# 开发一个项目,有时我需要比较两个文件名相同的字符串,

SELECT Hash 
FROM Beamer.PackageDetailFile (NOLOCK) 
WHERE FileName = '"+fileName+"' ; 

这不起作用,表和列名是正确的。然而,

SELECT Hash FROM Beamer.PackageDetailFile (NOLOCK)

这段代码给了我哈希。

有什么问题?请帮忙谢谢。

问题解决了,我调用的文件名是目录路径而不是文件名,这就是问题所在。工作正常现在向所有人欢呼

4

2 回答 2

1

正如人们所说,避免在 C# 中创建 sql 语句。但如果您坚持,请检查以确保 C# 中的 'fileName' 变量不为空并且具有正确的值。

我遇到的另一个问题是 SQL Server 中列的长度。例如,如果你的数据库列是 varchar(50),并且你的文件名超过 50 个字符,那么比较将失败(你会发现存储在数据库中的文件名被截断)。在这种情况下,您可能应该将数据库列更改为更大的长度或只是 varchar(max)

于 2012-07-11T07:31:02.077 回答
1

查询本身应该没问题,虽然这是非常糟糕的做法,并且应该使用参数,即

WHERE FileName = @filename

并向名为 的命令添加一个参数filename,其值来自本地变量。

这可能失败的原因:

  • 区分大小写;如果 CS,'abc'则不等于'AbC'(如果是 CI,则为
  • 填充,即[n]char(len)vs [n]varchar(len);a[n]char(len)在右侧用空格填充,这可能会产生奇怪的结果
  • unicode,即N'{blah}'vs '{blah}'- 主要只是非 ASCII “blah”的问题
  • 长度修整;如果列是[n]varchar(20)并且您的参数长度为 80 个字符,则它将与列中的修剪版本不匹配
于 2012-07-11T07:39:15.793 回答