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

VB.NET使用Npgsql连接PostgreSQL失败,报错‘Couldn't set old guids’如何解决?

解决Npgsql连接PostgreSQL时"Couldn't set old guids"错误

问题重现

连接PostgreSQL时抛出异常:

InnerException = {"Couldn't set old guids (Parameter 'old guids')"}

使用的连接字符串:

"Server = 192.168.XX.XXX; Port = 5432; Database = XXXXX; User Id = postgres; Password = XXXXXX; Initial Schema = public; Pooling=true; Min Pool Size =0; Maximum Pool Size=1024; old guids=True"

VB连接代码:

Public ConexionPostSql2 As New NpgsqlConnection(cs2)
Public Function ConectarPostgreSql2() As Boolean
    Try
        System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance)
        ConexionPostSql2.Open()
        ConectarPostSql2 = True
    Catch ex As Exception
        ConectarPostSql2 = False
        MsgBox(ex.Message, MsgBoxStyle.Critical, "Error PostgreSQL")
    End Try
End Function

解决方法

1. 适配Npgsql版本调整参数

  • 如果使用Npgsql 6.0及以上版本:OldGuids参数已被废弃,改用GuidFormat参数控制Guid存储格式。

    • 若需要旧版Guid存储(bytea类型),将连接字符串中的old guids=True替换为:
      GuidFormat=Legacy
      
    • 若使用默认的uuid类型存储,直接移除old guids=True参数即可。
  • 如果使用Npgsql 5.x及更早版本:

    • 确保参数名拼写为驼峰式写法(部分旧版本可能严格校验):
      OldGuids=True
      
    • 若仍报错,尝试移除该参数,使用默认的Guid处理逻辑。

2. 规范连接字符串格式

移除参数值前后的多余空格,确保格式合规,示例修正后的连接字符串(以Npgsql 6+为例):

"Server=192.168.XX.XXX;Port=5432;Database=XXXXX;User Id=postgres;Password=XXXXXX;Initial Schema=public;Pooling=true;Min Pool Size=0;Maximum Pool Size=1024;GuidFormat=Legacy"

3. 校验版本兼容性

确认Npgsql版本与PostgreSQL版本匹配:

  • 新版本Npgsql(6+)建议搭配PostgreSQL 10及以上版本;
  • 若使用较旧的PostgreSQL版本,可降级Npgsql至5.x版本,再使用OldGuids=True参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:03:16