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

时间:2010-08-15 19:09:37

标签: c# postgresql

您好目前有问题,我想在postgres数据库中插入值,其中表包含自定义类型,如。

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

当我尝试在C#中添加参数时,由于错误的NpgsqlDbType,我总是会收到错误。所以我的问题是NpgsqlDbType用于这种自定义类型。

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

感谢您的帮助。因为这个问题,我真的很生气。

2 个答案:

答案 0 :(得分:3)

毕竟,我找到了解决问题的解决方案,尽管这不是真正的解决方案。 我现在添加一个NpgsqlDbType.Varchar参数并将一个CAST(:p1作为“TestEnum”)添加到SQL

e.g。

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

它适用于我,虽然我不认为这是一个非常好的解决方案,因为演员。 如果有人将来会找到更好的解决方案,请给我留言。 ;)

答案 1 :(得分:0)

根据 PostgreSQL 8.4.4 Documentation: 8.7. Enumerated Types

  

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

这表明它们在内部存储为 32位整数。它使用系统目录pg_enum从整数映射到名称并返回。

不幸的是, documentation for NpgsqlDbType 并未阐明每个枚举值的含义,但我的猜测是NpgsqlDbType.Integer可能指的是32位整数。

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