Oracle 18c密码含分号/双引号时VB.NET连接报错问题
解决VB.NET连接Oracle18c时含特殊字符(分号/双引号)的密码报错问题
问题原因
分号(;)是Oracle连接字符串的参数分隔符,双引号(")是字符串定界符,当密码中包含这些字符时,若未正确转义,连接字符串解析器会错误识别参数结构,抛出Input string was not in a correct format异常。
解决方案
移除冗余代码,正确使用
OracleConnectionStringBuilder
你代码中connStringBuilder.Password = "" & oraclepwd & ""属于冗余操作,OracleConnectionStringBuilder本身会自动处理密码中的特殊字符转义,直接赋值原始密码即可:connStringBuilder.Password = oraclepwd确保ODP.NET驱动版本兼容Oracle18c
旧版本的Oracle数据访问组件(ODP.NET)对特殊字符的处理存在缺陷,请使用适配Oracle18c的ODP.NET Managed Driver或Unmanaged Driver版本(推荐Managed Driver,无需额外安装Oracle客户端)。手动转义(驱动版本旧时备用)
如果上述方法仍不生效,可手动对特殊字符进行转义:- 密码含分号:用双引号包裹整个密码,例如密码
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
相关产品推荐
相关产品推荐

