2010-12-13 9 views
0

vb.netのSQL文をAccessデータベースに実行しようとしていますが、大括弧[]を使用してreserverd単語をエスケープしています。これはプログラム内のすべての私のSELECTステートメントで働いています。vb.netはSQL文の予約済みキーワードをエスケープします

予約語はlevel

である。しかし、以下のSQL文は、INSERT INTOステートメントで

構文エラーを言って失敗します。私が直接文をコピーして、Accessでこれを実行すると

は、それは私が[レベル]を削除し、別の列名でこれを置き換える場合は、上記の文が機能

datalayer.getDataTable(String.Format("INSERT INTO users (username, password, [level]) VALUES ({0}, {1}, {2})", username, password, level)) 

正常に動作します。

ありがとうございました。

答えて

1

引用符で値を囲みません。これを試してみてください:

datalayer.getDataTable(String.Format(
"INSERT INTO users (username, password, [level]) VALUES ('{0}', '{1}', '{2}')", 
username, password, level)) 

しかし、アンドリューが言うように、あなたは本当にパラメータを使用する必要があります。 Access SQLで(David W Fentonがまもなく登場し、「Jet」SQLと言います)位置パラメータを使用する必要があります。あなたの文は次のようになります。

INSERT INTO users (username, password, [level]) VALUES (?, ?, ?) 

あなたは正しい値でOleDbParameterオブジェクトを作成する必要があり、そしてあなたの挿入を行うために実行するために上記のテキストとのOleDbCommandと思います。

+0

私は値の引用を試みましたが、これはまだ同じ結果を持っていますか?ありがとう。 – Elliott

+0

@Elliott、あなたの答えを編集して、あなたがAccessで実行している正確なステートメントを表示してください。 [水準器]が動作しないものと、機能しないものの両方。 –

0

常にparametersを使用してください。あなたがやっていることはとても危険で、ドアはSQL injectionのままになります。

これで、データベースに挿入する値をエスケープする心配はありません。

+0

こんにちは、このプロジェクトは大学のためのものですから、私は厄介な問題について心配する必要はありません。ありがとう – Elliott

+0

実際には、パラメータを使用することでセキュリティが向上し、データをエスケープする必要がなくなります。 –

+0

私はセクシーなことを心配する傾向がありますが、私はこのプロジェクトを終えるために急いでいますが、私はそれを検討すると思います。ありがとう:) – Elliott

関連する問題