.net - 这个 OleDBCommand 有什么问题?

标签 .net ms-access oledb

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

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

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

关于.net - 这个 OleDBCommand 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13794354/

相关文章:

python - 使用 Access ODBC 的 pyodbc fast_executemany 会使 Python 解释器崩溃

excel - VBA:从 .xls 切换到 .xlsx 文件格式

mysql - 是否可以使用 SQL 查询将数据从 MySQL 表插入到 MS Access 表?

SSIS-OleDb 快速加载与批量插入任务

vba - 在 VBA 完成执行之前,Power Query 表不会下载数据

.net - 在单元测试 HttpClient 时如何模拟 GetDiscoveryDocumentAsync?

c# - 如何更改 Fluent NHibernate 中小数的默认比例和精度?

c# - System.Data.OleDb.OleDbConnectionInternal..ctor : Unspecified error

asp.net - Signal-R 如何适应 IIS 激活模型?

c# - 如何在 C# 中同时运行服务的多个实例?