私はOleDb.OleDbDataAdaptorオブジェクトを作成してDataTableオブジェクトを埋めています。MDBテーブルの列がUnicodeで失敗しましたか?
Dim sql = "SELECT * FROM DBTable TC WHERE TC.Text=N'Criteria'"
私は、フィールド「テキスト」ので、先行資本Nを使用しています。SQLはこのように私のクエリ文字列である
Dim adapter As New OleDb.OleDbDataAdapter(sql, myConnection)
:OleDbDataAdaptorの建設では、私はこのようにそれを初期化しますテーブル "DBTable"はユニコードであるはずです。 そして、myConnectionは、DBTableが定義されているmdbファイルへの接続を表します。
しかし、adaptor.Fill(myDataTable)を実行すると、失敗し、例外がスローされます。クエリ式 'TC.Text = N'Criteria'に構文エラー(演算子がありません)がスローされます。誰がここで何が起こったのか知っていますか?私はユニコードテキストを進めるために、Nが必要であることを知りました。別の質問は、どのようにmdbファイルのフィールドが本当にユニコードであることを確認できますか?私はフィールドのデータ型が「テキスト」であり、Access 2003を使用していることしかわかりませんので、私はそれがユニコードであると仮定することができます。実際にはフィールドのUnicode圧縮を有効にしていますが、 "Criteria"というテキストにはわかりますが、とにかく特殊文字はありません。
ありがとうございました!
@Remouありがとう、C#は私が使用しているものではありません。私はVB.NETを使用しています。それはDimがどこから来るかです。また、このコード部分は、MS Accessアプリケーションからのものではありません。ただし、.mdb DBに接続しようとしています。しかし、SQL Serverとは異なり、mdbのユニコードテキストにアクセスするために大文字のNを持つ必要はないと感じているのでしょうか?同様のコードはSQL Server DBでも正常に動作しますが、Accessデータベースでのみ失敗します。 – tete
http://stackoverflow.com/questions/6040671/using-n-in-select-query-gives-syntax-error – Fionnuala
を参照してください。 @Remouありがとう!私は、アクセスのためのアイデアは、文字列の前に大文字Nを入れてはならないと思います。そうでなければ、上記のエラーが発生します。私たちのプログラムはAccess DBとSQL Server DBに同じルーチンを使用していました。そのため、SQL Serverで動作するルーチンはAccess DBとは関係ありません。 – tete