2012-02-13 9 views
0

私は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"というテキストにはわかりますが、とにかく特殊文字はありません。

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

+0

@Remouありがとう、C#は私が使用しているものではありません。私はVB.NETを使用しています。それはDimがどこから来るかです。また、このコード部分は、MS Accessアプリケーションからのものではありません。ただし、.mdb DBに接続しようとしています。しかし、SQL Serverとは異なり、mdbのユニコードテキストにアクセスするために大文字のNを持つ必要はないと感じているのでしょうか?同様のコードはSQL Server DBでも正常に動作しますが、Accessデータベースでのみ失敗します。 – tete

+0

http://stackoverflow.com/questions/6040671/using-n-in-select-query-gives-syntax-error – Fionnuala

+0

を参照してください。 @Remouありがとう!私は、アクセスのためのアイデアは、文字列の前に大文字Nを入れてはならないと思います。そうでなければ、上記のエラーが発生します。私たちのプログラムはAccess DBとSQL Server DBに同じルーチンを使用していました。そのため、SQL Serverで動作するルーチンはAccess DBとは関係ありません。 – tete

答えて

0

@Remouレスポンスに基づいて、Accessデータベースの場合、先行する大文字NはUnicodeテキストには必要ないことが分かります。 NはSQL Serverデータベースにのみ必要です

関連する問題