我一直在用C#开发一个项目,在某些时候我需要比较两个文件名相同的字符串,
SELECT Hash
FROM Beamer.PackageDetailFile (NOLOCK)
WHERE FileName = '"+fileName+"' ;
这不起作用,表名和列名都正确。然而,
SELECT Hash FROM Beamer.PackageDetailFile (NOLOCK)
这段代码给了我哈希。
有什么问题?请帮助谢谢。
问题解决了,fileName im调用的是目录路径而不是文件名,这就是问题所在。工作正常,现在欢呼所有
答案 0 :(得分:1)
正如人们所说,避免在C#中创建sql语句。但是如果你坚持,请检查以确保C#中的'fileName'变量不为空且具有正确的值。
我遇到的另一个问题是SQL Server中列的长度。例如,如果您的数据库列是varchar(50),并且您的fileName超过50个字符,则比较将失败(您将发现存储在数据库中的文件名被截断)。在这种情况下,您可能应该将数据库列更改为更大的长度或仅更改varchar(max)
答案 1 :(得分:1)
查询本身应该没问题,虽然这是非常糟糕的做法,应该使用参数,即
WHERE FileName = @filename
并在名为filename
的命令中添加一个参数,其中包含本地变量的值。
原因可能会失败:
'abc'
不等于'AbC'
(如果CI,它)[n]char(len)
vs [n]varchar(len)
;一个[n]char(len)
用右边的空格填充,这可能会产生奇怪的结果N'{blah}'
vs '{blah}'
- 主要只是非ASCII“blah”的问题[n]varchar(20)
且您的参数长度为80个字符,则与列中的剪裁版本不匹配