代码之家  ›  专栏  ›  技术社区  ›  BitKFu

如何在C中为Postgres枚举类型添加参数#

  •  2
  • BitKFu  · 技术社区  · 14 年前

    Hi当前有一个问题,我想在Postgres数据库中插入值,该数据库中的表包含自定义的类型,如。

    CREATE TYPE TestEnum AS ENUM ('Value1','Value2');
    

    当我试图在C中添加一个参数时,我总是得到一个错误,因为npgsqldbtype错误。所以我的问题是,对于这样的自定义类型,应该使用什么样的npgsqldbtype。

    var parameter = new NpgsqlParameter(":p1", NpgsqlDbType.????)
    {
        Value = "Value1",
        Direction = ParameterDirection.Input
    }
    

    谢谢你的帮助。因为这个问题,我真的疯了。

    2 回复  |  直到 14 年前
        1
  •  3
  •   BitKFu    14 年前

    毕竟,我找到了一个解决问题的方法,尽管它不是真正的解决方案。 我现在添加一个npgsqldbtype.varchar参数,并向SQL添加一个强制转换(:p1作为“testenum”)。

    例如

    INSERT INTO tableName (Col) VALUES ( CAST(:p1 as "TestEnum") )
    

    这对我很有效,尽管我认为这不是一个很好的解决方案,因为演员阵容。 如果将来有人能找到更好的解决方案,请给我打个电话。;)

        2
  •  0
  •   Timwi    14 年前

    根据 PostgreSQL 8.4.4 Documentation: 8.7. Enumerated Types :

    枚举值占用磁盘上的四个字节。

    这表明它们在内部存储为 32位整数 . 它使用系统目录 pg_enum 从整数映射到名字和后面。

    不幸的是, documentation for NpgsqlDbType 并没有解释这些枚举值的含义,但我的猜测是 NpgsqlDbType.Integer 可能指的是32位整数。

    但是,我必须承认我在这里猜测。也有可能 NpgsqlParameter 需要一个表示用查询发送到数据库的数据的类型,该类型显然是字符串,因此如果 npgsqldbtype.integer整数 不起作用,我的下一个猜测是 NpgsqlDbType.Varchar .