1

sqliteクエリで次の例外が発生します。

式に未定義の関数呼び出しlower()が含まれています

VS2012には非常に単純なSQLite型のデータセットがあります。

大量のデータを解析していて、新しい行を追加する前に、行がすでに存在するかどうかを確認したいと思います。

このメソッドを使用して.select()、データ行の配列を返しています。配列の長さがゼロの場合は、新しい新しいものを追加します。単純!

すべてが正常に機能していますが、大文字と小文字が間違っている場合に重複行が追加されないようにするためのチェックを追加しました。ファイル名を保存しています。

selectステートメントは次のとおりです。

"lower(FileName) = '" + EscapeFileName(strFileName).ToLower() + "'"

ただし、 lower(FileName)で上記のエラーが発生します。これを削除すると問題なく動作しますが、明らかにチェックは比較できません。

このステートメントは、SQLiteAdminで期待どおりに機能します。

4

2 に答える 2

3

私が正しく理解していれば、あなたは.NET DataTable(クエリの結果)を持っていDataTable.Select(string)て、where句を渡して呼び出しています。

このwhere句は、SQLiteではなく.NETによって処理されます(Timが指摘したように)。DataTableのSelect関数でSQLite(またはその他のDBMS)関数を使用することはできません。次の機能を使用できます。

  • CONVERT –特定の式を指定された.NETFrameworkタイプに変換します
  • LEN –文字列の長さを取得します
  • ISNULL –式をチェックし、チェックされた式または置換値を返します
  • IIF –論理式の結果に応じて2つの値のいずれかを取得します
  • TRIM – \ r、\ n、\ t、、'などの先頭と末尾の空白文字をすべて削除します</li>
  • SUBSTRING –文字列内の指定されたポイントから開始して、指定された長さのサブ文字列を取得します

詳細については、 DataView RowFilter構文[C#]を参照してください。

于 2013-02-28T15:00:51.870 に答える
1

The statement works as expected in SQLiteAdmin.

クライアント側のデータオブジェクトは、サーバー側の関数ではなく、クライアント側の関数を呼び出します。

編集:PS DataTableには、falseに設定できるCaseSensitiveオプションがあります。

PPS .NETデータオブジェクトにレコードのセットを取得すると(つまり、選択が実行され、行セットが取得されると)、データオブジェクトの組み込みメソッド(select、findなど)によるデータのさらなるフィルタリングは次のようになります。ローカルのクライアント側の切断されたデータを操作する。データベースとの「会話」は進行中ではありません。これらのクライアント側のメソッドは、データベースに「命令を渡す」ことはありません。切断されたレコードセットモデルを読んでください。

于 2013-02-28T14:43:56.010 に答える