这个OleDBCommand有什么问题?

时间:2012-12-10 02:53:47

标签: .net ms-access oledb

在.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 个答案:

答案 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 '水田[_]%';"