-2

私は C# でプロジェクトに取り組んできましたが、ある時点で、ファイル名が同じである 2 つの文字列を比較する必要があります。

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

これは機能していません。テーブルと列の名前は正しいです。でも、

SELECT Hash FROM Beamer.PackageDetailFile (NOLOCK)

このコードは私にハッシュを与えています。

どうしたの?助けてくださいありがとう。

問題は解決しました。呼び出しているfileNameはファイル名ではなくディレクトリパスでした。これが問題でした。正常に動作するようになりました

4

2 に答える 2

1

人々が言っ​​たように、C#でSQLステートメントを作成することは避けてください。ただし、主張する場合は、C#の「fileName」変数が空ではなく、正しい値であることを確認してください。

私が遭遇したもう1つの問題は、SQLサーバーの列の長さの問題です。たとえば、データベースの列がvarchar(50)で、fileNameが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、すなわちvs-N'{blah}''{blah}'に非ASCII「何とか」の問題のみ
  • 長さのトリミング; 列が[n]varchar(20)で、パラメータの長さが80文字の場合、列のトリミングされたバージョンと一致しません
于 2012-07-11T07:39:15.793 に答える