1

だから私はc#のmdbファイルからいくつかのデータをフェッチしました

"SELECT * FROM " + listBox1.GetItemText(listBox1.SelectedItem) + " WHERE Note = '" + listBox2.GetItemText(listBox2.SelectedItem).Replace("'","\'") + "'";

これは正しいデータを選択します、ここにあります

SELECT * FROM Main WHERE Note ='Hello'

mdbデータ構造は、CSVファイルとしてプロットされているように見えます。

"Record ID";Status;Placement;Private;Category;Note;Blob
14341665;4;2147483647;True;3;"""Hello"" - Neues

しかし、エントリを削除しようとすると

"DELETE FROM " + listBox1.GetItemText(listBox1.SelectedItem) + " WHERE \"Record ID\" LIKE '" + dr[0] + "';";

また

"DELETE FROM " + listBox1.GetItemText(listBox1.SelectedItem) + " WHERE \"Record ID\" = '" + dr[0] + "';";

たとえばのように見えます

DELETE FROM Main WHERE "Record ID" LIKE '14341665';

エントリはそこにとどまります。アプリケーションを再起動してもselectコマンドを再実行できますが、mdbは変更されません。

4

3 に答える 3

4

レコードIDは数値フィールドですか?もしそうなら、引用符を失います。

DELETE FROM Main WHERE [Record ID] = 14341665;

フィールド(列)名のスペースは常に問題になることに注意してください。このような列名は、予約語で名前が付けられた列と同様に、角かっこで囲む必要があります。

于 2012-06-19T12:00:15.400 に答える
1

レコードIDは数値であるため、その周りにアポストロフィを付けないでください。

"DELETE FROM " + listBox1.GetItemText(listBox1.SelectedItem) + " WHERE \"Record ID\" = " + dr[0]

注:本番コードでの使用は避けselect *、返されるデータを指定する必要があります。また、クエリに値を連結するのではなく、パラメータ化されたクエリを使用する必要があります。

于 2012-06-19T12:03:00.373 に答える
0

正しく覚えていれば、「like」は文字列データでのみ機能します。レコードIDのデータ型を確認してください。

レコードIDが数値の場合、「like」を使用してフィルタリングする前に、データベースの変換関数を使用して文字列に変換することをお勧めします。

ところで、dr[0]が適切にエスケープされていることを確認することを忘れないでください。

于 2012-06-19T12:01:28.190 に答える