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这一切都在一行中完成。

但是如何才能使它起作用呢?

4

1 回答 1

2

请参阅此 SO 问题的公认答案:Microsoft Jet 通配符:星号还是百分号?

由于您使用的是 OleDb,因此您使用的是 ANSI-92 查询模式,因此必须使用%而不是*作为通配符。您UPDATE在 Access 会话中工作的原因是它默认使用 ANSI-89 查询模式。

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

如果您希望_(下划线)字符匹配文字字符(而不是任何单个字符的 ANSI-92 通配符),请将其设置为模式中的单成员字符类:

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

我不确定这些 un​​icode 表和字段名称会发生​​什么。从您的问题来看,听起来他们可能不会造成问题。但是,如果没有其他方法,我会尝试将它们括在方括号中:

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