Npgsql 2.2.7不读取“;inet”;如果包含等于32的掩码,请键入数据值

本文关键字:掩码 数据 包含 读取 inet Npgsql 如果 | 更新日期: 2023-09-27 18:26:53

我有一个遗留的MFC应用程序,应该在C#上重写。MFC应用程序已从PostgreSql数据库读取数据,该数据库包含带掩码的inet类型列,例如:

233.81.116.0/32233.255.116.20/16等。

在C#中,我使用了Npgsql库,当我尝试读取此inet类型列时,Npgsql抛出异常

无法将CIDR网络强制转换为"233.255.116.20/16"值的地址"。

你对阅读这些价值观有什么想法吗?

Npgsql 2.2.7不读取“;inet”;如果包含等于32的掩码,请键入数据值

在将npgsql包升级到最新版本之前,我也遇到过同样的问题。由于我的代码在dll中,我还必须确保在升级npgsql后,使用我的dll将"System.Threading.Tasks.Extensions"包添加到项目中。

为了获得完整的ip地址(cidr和all)作为字符串,我使用了这个调用

    public string GetInetValue(NpgsqlDataReader dr, string columnName, String defaultValue)
    {
        var returnVal = defaultValue;
        try
        {
            returnVal = dr.IsDBNull(dr.GetOrdinal(columnName)) ? defaultValue : dr.GetFieldValue<String>(dr.GetOrdinal(columnName));
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine(ex.Message);
        }
        return returnVal;
    }