You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 18c密码含分号/双引号时VB.NET连接报错问题

解决VB.NET连接Oracle18c时含特殊字符(分号/双引号)的密码报错问题

问题原因

分号(;)是Oracle连接字符串的参数分隔符,双引号(")是字符串定界符,当密码中包含这些字符时,若未正确转义,连接字符串解析器会错误识别参数结构,抛出Input string was not in a correct format异常。

解决方案

  1. 移除冗余代码,正确使用OracleConnectionStringBuilder
    你代码中connStringBuilder.Password = "" & oraclepwd & ""属于冗余操作,OracleConnectionStringBuilder本身会自动处理密码中的特殊字符转义,直接赋值原始密码即可:

    connStringBuilder.Password = oraclepwd
    
  2. 确保ODP.NET驱动版本兼容Oracle18c
    旧版本的Oracle数据访问组件(ODP.NET)对特殊字符的处理存在缺陷,请使用适配Oracle18c的ODP.NET Managed Driver或Unmanaged Driver版本(推荐Managed Driver,无需额外安装Oracle客户端)。

  3. 手动转义(驱动版本旧时备用)
    如果上述方法仍不生效,可手动对特殊字符进行转义:

    • 密码含分号:用双引号包裹整个密码,例如密码test;123转义为"test;123"
    • 密码含双引号:将单个双引号替换为两个双引号,例如密码test"123转义为test""123
      转义后再赋值给Password属性。

修改后的完整代码示例

Public Function oracle_connect(ByVal user As String, ByVal pwd As String, ByVal dbname As String) As Boolean
    oracle_disconnect()
    oraclepwd = pwd
    oracleuser = user
    oraclehost = dbname

    Try
        Dim connStringBuilder As New OracleConnectionStringBuilder()
        connStringBuilder.UserID = oracleuser
        connStringBuilder.Password = oraclepwd ' 直接赋值原始密码
        connStringBuilder.DataSource = oraclehost
        connStringBuilder.Pooling = False  

        conn = New OracleConnection(connStringBuilder.ConnectionString)
        mycommand = conn.CreateCommand()            
        
        conn.Open()
        Return True

    Catch ex As Exception
        ' 可添加异常日志输出,方便排查具体问题
        ' Console.WriteLine(ex.ToString())
        Return False 
    Finally
        If conn IsNot Nothing AndAlso conn.State = ConnectionState.Open Then
            conn.Close()
        End If
    End Try
End Function

内容的提问来源于stack exchange,提问作者Jagadish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 07:25:22