0

http://sqlite.phxsoftware.com/ System.Data.SQLiteプロバイダーを使用して、C#フォームアプリで選択するデータベースとしてSqliteを使用しています。検索機能を実装しようとしていますが、うまく機能していません...または何かが足りません。

私が使用している簡略化されたSQLは次のようになります。

SELECT *
FROM Table
WHERE column LIKE @boundParameter ESCAPE '!'

これを実行すると、パラメーターを使用した順列(?または?001または:boundParameterまたは@boundParameterを使用)で、FormatException:"入力文字列が正しい形式ではありませんでした。"が表示されます。LIKEでパラメーターを使用できないということは何も見つかりませんでした。誰かがこれについて何か知っていますか?他の方法でそれを行う必要がありますか?

4

4 に答える 4

2

次のようなことを試すことをお勧めします。

"SELECT * FROM [Table] WHERE [column] LIKE @boundParameter ESCAPE @escape";

その後:

command.Parameters.AddWithValue("@boundParameter", parameter));
command.Parameters.AddWithValue("@escape", "!");

Parameters.AddWithValue は、毎回新しいパラメーターを宣言するのではなく、バインドされたパラメーターを追加する SQLite の方法です。

@Noah (申し訳ありませんが、まだコメントできません)

Stephen Jennings は正しいです。バインドしている値を引用する必要はありません。

于 2009-04-16T07:11:21.200 に答える
0

どのように接続してパラメータを追加しますか?

私はSQLiteをあまり使用していませんが、次のように機能するはずです。

SQLiteCommand command = _yourConnection.CreateCommand();
command.CommandType = CommandType.Text;
command.CommandText = "SELECT * FROM Table WHERE column LIKE @boundParameter";
command.Parameters.Add(new SQLiteParameter("@boundParameter", _yourSearchCriteria));
...
于 2009-03-21T23:19:25.050 に答える
0

「入力文字列は正しい形式ではありませんでした」は、SQLite のどのバージョンからも返されるエラー メッセージではありません

ラッパーによって返されている必要があります。SO ... sqlite.phxsoftware.com の ADO.NET 2.0 Provider を使用していると思います。

パラメータにバインドする値を引用することを忘れないでください。

たとえば、

command.Parameters.Add(new SQLiteParameter("@boundParameter", _pattern));

then _pattern = "'test'" ではなく"test"

于 2009-04-16T05:21:46.003 に答える
0

このプログラム コードは、PARAMETER SUBSTITUTION と PATTERN FITTING を含むクエリを 1 ステップで実行します。ここで、文字列変数 myNamePattern は、顧客を検索する文字列であるため、返されたすべての顧客に変数 myNameattern 文字列が含まれます。私も同じ問題を抱えていましたが、解決しました!これは、文字列パターン (パラメーターでもある) を SQLiteCommand.CommandText に置き換える完璧な方法です。

SQLiteCommand コマンド = conn.CreateCommand(); command.CommandText = "select * from Customer where name like @myStringParameter"; command.Parameters.Add("myStringParameter", System.Data.DbType.String).Value = "%"+ myNamePattern+ "%";

于 2009-05-12T23:36:51.073 に答える