C#中的SQL代码比较属性

时间:2012-07-11 07:17:45

标签: c# sql-server select compare

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

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

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

SELECT Hash FROM Beamer.PackageDetailFile (NOLOCK)

这段代码给了我哈希。

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

WHERE FileName = @filename

并在名为filename的命令中添加一个参数,其中包含本地变量的值。

原因可能会失败:

  • 区分大小写;如果是CS,那么'abc'不等于'AbC'(如果CI,
  • 填充,即[n]char(len) vs [n]varchar(len);一个[n]char(len)用右边的空格填充,这可能会产生奇怪的结果
  • unicode,即N'{blah}' vs '{blah}' - 主要只是非ASCII“blah”的问题
  • 长度修剪;如果列为[n]varchar(20)且您的参数长度为80个字符,则与列中的剪裁版本不匹配