Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中为postgres枚举类型添加参数#_C#_Postgresql - Fatal编程技术网

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

C# 如何在C中为postgres枚举类型添加参数#,c#,postgresql,C#,Postgresql,Hi目前有一个问题,我想在postgres数据库中插入值,其中表包含自定义类型,如 CREATE TYPE TestEnum AS ENUM ('Value1','Value2'); 当我尝试在C#中添加参数时,总是会因为错误的NpgsqlDbType而出错。所以我的问题是,对于这些自定义类型,应该使用什么样的NpgsqlDbType var parameter = new NpgsqlParameter(":p1", NpgsqlDbType.????) { Value = "Val

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

CREATE TYPE TestEnum AS ENUM ('Value1','Value2');
当我尝试在C#中添加参数时,总是会因为错误的NpgsqlDbType而出错。所以我的问题是,对于这些自定义类型,应该使用什么样的NpgsqlDbType

var parameter = new NpgsqlParameter(":p1", NpgsqlDbType.????)
{
    Value = "Value1",
    Direction = ParameterDirection.Input
}
谢谢你的帮助。因为这个问题,我真的快发疯了。

根据

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

这表明它们在内部存储为32位整数。它使用系统目录
pg_enum
将整数映射到名称,然后再映射回来

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


然而,我必须承认,我在这里猜测。还有一种可能是,
npgsqldbParameter
需要一个类型来表示通过查询发送到数据库的数据,该类型显然是一个字符串,因此如果
NpgsqlDbType.Integer
不起作用,我的下一个猜测是
NpgsqlDbType.Varchar

毕竟,我找到了解决问题的解决方案,虽然这不是真正的解决办法。 现在,我添加了一个NpgsqlDbType.Varchar参数,并将强制转换(:p1作为“TestEnum”)添加到SQL中

e、 g

这对我来说很有效,尽管由于演员阵容的原因,我认为这不是一个很好的解决方案。
如果将来有人能找到更好的解决方案,请给我写信

这就是问题所在。两者都不起作用。因此,必须有另一种解决方案。它总是告诉以下消息:FEHLER:42804:Spalte»TypeEnum«帽子类型“TestEnum”,aber der Ausdruck帽子类型字符变化,这太奇怪了。。。你还有别的想法吗?毕竟,我找到了一个解决问题的办法,尽管它不是真正的解决办法。现在,我添加了一个NpgsqlDbType.Varchar参数,并向SQL添加了一个强制转换(:p1为“TestEnum”)。
INSERT INTO tableName (Col) VALUES ( CAST(:p1 as "TestEnum") )