在 .NET 4.5 中,我尝试在 Access 数据库上执行 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()
查询本身在 Access 中执行得很好,但在 .NET 中它永远不会影响任何行。
如果我将 CommandText 更改为 "UPDATE Tレイヤ管理 SET レイヤー=0 WHERE 名前='水田_" & Parameter & "'"
,它就会起作用。并使用 Parameter
准确指定名称,但随后我必须编写一个循环,同时使用 LIKE
这一切都在一行中完成。
但是如何才能使其发挥作用呢?
最佳答案
请参阅此问题的已接受答案:Microsoft Jet wildcards: asterisk or percentage sign?
由于您使用的是 OleDb,因此您使用的是 ANSI-92 查询模式,因此必须使用 %
而不是 *
作为通配符。 UPDATE
在 Access session 中工作的原因是它默认使用 ANSI-89 查询模式。
"UPDATE Tレイヤ管理 SET レイヤー=0 WHERE 名前 LIKE '水田_%';"
如果您希望使用 _
(下划线)字符来匹配文字字符(而不是任何单个字符的 ANSI-92 通配符),请使其成为模式中的单成员字符类:
"UPDATE Tレイヤ管理 SET レイヤー=0 WHERE 名前 LIKE '水田[_]%';"
我不确定这些 unicode 表和字段名称会发生什么情况。从你的问题来看,他们可能不会造成问题。但是,如果没有其他办法,我会尝试将它们括在方括号中:
"UPDATE [Tレイヤ管理] SET [レイヤー]=0 WHERE [名前] LIKE '水田[_]%';"
关于.net - 这个 OleDBCommand 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13794354/