C#中的SQL代码比较属性



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

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

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

SELECT Hash FROM Beamer.PackageDetailFile (NOLOCK)

这个代码给了我散列。

怎么了?请帮忙,谢谢。

问题解决了,fileName im调用的是目录路径而不是文件名,这就是问题所在。现在运行良好,为所有欢呼

查询本身应该是好的,尽管这是非常糟糕的做法,并且应该使用参数,即

WHERE FileName = @filename

并使用本地变量中的值向名为filename的命令添加一个参数。

失败的原因:

  • 病例敏感性;如果是CS,则'abc'不等于'AbC'(如果是CI,则
  • 填充,即[n]char(len)[n]varchar(len)[n]char(len)在右边用空格填充,这可能会产生奇怪的结果
  • unicode,即N'{blah}''{blah}'-主要只是非ASCII"blah"的问题
  • 长度修剪;如果该列为[n]varchar(20),并且您的参数为80个字符长,则它将与该列中的修剪版本不匹配
正如人们所说,避免在C#中创建sql语句。但是,如果您坚持,请检查以确保C#中的"fileName"变量不是空的,并且具有正确的值。

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

相关内容

  • 没有找到相关文章

最新更新