表达式中未定义的函数'Replace'

时间:2011-06-14 09:17:17

标签: .net ms-access oledb jet

我正在使用VB.Net应用程序。我将它与MS Access数据库连接。现在我必须执行一个查询。我的问题是:Update table1 set field1=replace(field1,'|','"')

这个查询似乎可以从Access数据库的查询分析器中正常工作,但是当我从VB.Net代码执行相同的操作时,它会向我抛出错误,指出“表达式中未定义的函数'替换'”

我正在使用OLEDB连接和命令。我正在使用“executenonquery”功能。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:4)

不幸的是,当您从VB.Net应用程序连接到Access数据库时,您根本没有使用Access查询引擎。你正在使用Jet。 Access中可用的某些功能(例如替换)在Jet中不可用。

经典的解决方案是结合使用 Iif Instr 等( 可用)。是的,它不如使用替换那么好,但你必须学会​​不用。

答案 1 :(得分:3)

这个问题目前被接受的答案有点过时了。使用

Provider=Microsoft.ACE.OLEDB.12.0

以下C#代码运行正常:

cmd.CommandText =
    "UPDATE table1 SET field1 = Replace(field1, '|', '\"')";
cmd.ExecuteNonQuery();

换句话说,Replace()功能可能会导致旧版" Jet" OLEDB驱动程序(也许是早期版本的" ACE"驱动程序)但是从Access 2010的版本开始,这不再是一个问题。