2

.NET 4.5 では、アクセス データベースで OleDBCommand を実行しようとしています。

私が持っているコードは

Dim rows As Integer
Dim dbCommand As OleDb.OleDbCommand = New OleDb.OleDbCommand
Dim dbTransaction As OleDb.OleDbTransaction

Call gOleCn.Open()
dbTransaction = gOleCn.BeginTransaction
dbCommand = New OleDb.OleDbCommand("", gOleCn, dbTransaction)
dbCommand.CommandText = "UPDATE Tレイヤ管理 SET レイヤー=0 WHERE 名前 LIKE '水田_*';"
rows = dbCommand.ExecuteNonQuery()

クエリはアクセス自体で正常に実行されますが、.NET では行に影響を与えることはありません。CommandText を に変更し、"UPDATE Tレイヤ管理 SET レイヤー=0 WHERE 名前='水田_" & Parameter & "'"を使用して名前を正確に指定すると機能しますParameterが、ループを記述する必要がありますが、LIKEすべてが 1 行で完了します。

しかし、これを機能させるにはどうすればよいでしょうか。

4

1 に答える 1

2

このSOの質問に対する受け入れられた回答を参照してください:Microsoft Jetワイルドカード:アスタリスクまたはパーセント記号?

OleDbを使用しているため、ANSI-92クエリモードを使用しているため、ワイルドカード文字としてでは%なくを使用する必要があります。Accessセッション内で作業した*理由は、デフォルトでANSI-89クエリモードを使用しているためです。UPDATE

"UPDATE Tレイヤ管理 SET レイヤー=0 WHERE 名前 LIKE '水田_%';"

(アンダースコア)文字をリテラル文字と一致させる場合_(単一文字のANSI-92ワイルドカードではなく)、パターン内の単一メンバー文字クラスにします。

"UPDATE Tレイヤ管理 SET レイヤー=0 WHERE 名前 LIKE '水田[_]%';"

これらのUnicodeテーブル名とフィールド名がどうなるかわかりません。あなたの質問から、彼らは問題を引き起こしていないようです。ただし、他に何も機能しない場合は、角かっこで囲んでみます。

"UPDATE [Tレイヤ管理] SET [レイヤー]=0 WHERE [名前] LIKE '水田[_]%';"
于 2012-12-10T03:23:30.800 に答える