在.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
这一切都在一行中完成。
但是如何才能使其发挥作用?
答案 0 :(得分:2)
请参阅此SO问题的已接受答案:Microsoft Jet wildcards: asterisk or percentage sign?
由于您使用的是OleDb,因此您使用的是ANSI-92查询模式,因此必须使用%
而不是*
作为通配符。您的UPDATE
在Access会话中工作的原因是它默认使用ANSI-89查询模式。
"UPDATE Tレイヤ管理 SET レイヤー=0 WHERE 名前 LIKE '水田_%';"
如果您希望_
(下划线)字符与文字字符匹配(而不是任何单个字符的ANSI-92通配符),请将其设置为模式中的单成员字符类:
"UPDATE Tレイヤ管理 SET レイヤー=0 WHERE 名前 LIKE '水田[_]%';"
我不确定那些unicode表和字段名称会发生什么。从你的问题来看,它们可能不会引起问题。但是,如果没有其他工作,我会尝试用方括号括起来:
"UPDATE [Tレイヤ管理] SET [レイヤー]=0 WHERE [名前] LIKE '水田[_]%';"