【问题标题】:Undefined function 'Replace' in expression表达式中未定义的函数“替换”
【发布时间】:2011-09-14 13:11:19
【问题描述】:

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

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

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

谁能帮帮我?

【问题讨论】:

    标签: .net ms-access oledb jet


    【解决方案1】:

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

    Provider=Microsoft.ACE.OLEDB.12.0

    以下 C# 代码可以正常工作:

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

    换句话说,Replace() 函数可能会导致较旧的“Jet”OLEDB 驱动程序(可能还有早期版本的“ACE”驱动程序)出现问题,但从 Access 2010 版本开始,这不再是问题.

    【讨论】:

    • 运行Microsoft.Ace.OLEDB.12需要特定版本的VS吗?如果没有,那么我在哪里可以将它添加到我的项目中?
    • 不需要特定版本的 Visual Studio,您不需要向项目添加任何其他引用。只需使用System.Data.OleDb 对象和包含Provider=Microsoft.ACE.OLEDB.12.0 的连接字符串。 (并确保已安装的 Access 数据库引擎版本的“位数”与您的应用程序的“位数”匹配:64 位或 32 位。)
    • 我不认为 Ace.OLEDB.12.0 可以作为导入课堂的选项。我已将 System.Data.OleDb 导入我的班级
    • 只需使用适当的连接字符串创建一个 OleDbConnection 对象。有关详细信息,请参阅 connectionstrings.com 和/或在 SO 上搜索示例。
    【解决方案2】:

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

    经典的解决方案是结合使用 IifInstr 等(这些可用的)。是的,它不如有 Replace 来玩,但你必须学会​​不用。

    【讨论】:

    • 我对 Sql 查询很陌生。我很困惑找到 Jet 中接受的替换功能的替代方案。有什么帮助吗?
    猜你喜欢
    • 2014-09-14
    • 2017-12-27
    • 1970-01-01
    • 2015-06-25
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    相关资源
    最近更新 更多