Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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# 将字典(字符串,Int16())保存到PostgreSQL单元格中_C#_Database_Postgresql_Visual Studio_Npgsql - Fatal编程技术网

C# 将字典(字符串,Int16())保存到PostgreSQL单元格中

C# 将字典(字符串,Int16())保存到PostgreSQL单元格中,c#,database,postgresql,visual-studio,npgsql,C#,Database,Postgresql,Visual Studio,Npgsql,我有一个字典(字符串,INT16())。这个字典表示测量的模拟值。我想将此词典存储到PostgreSQL数据库的一个单元格中。我正在使用Npgsql 我搜索了很长时间,但我不知道怎么做 我的想法是序列化字典并将其保存为数组,但我不确定这是否正确 有没有人能在这件事上帮助我 谢谢你的回答看看 更新: 下面是一个完整的示例,说明如何从pgsql实现这一点 定义字典的元素类型 CREATE TYPE StringIntPairType AS (k text,v int); 创建一个示例表。请注意,集

我有一个
字典(字符串,INT16())。
这个字典表示测量的模拟值。我想将此词典存储到PostgreSQL数据库的一个单元格中。我正在使用Npgsql

我搜索了很长时间,但我不知道怎么做

我的想法是序列化字典并将其保存为数组,但我不确定这是否正确

有没有人能在这件事上帮助我

谢谢你的回答

看看

更新: 下面是一个完整的示例,说明如何从pgsql实现这一点

定义字典的元素类型

CREATE TYPE StringIntPairType AS (k text,v int);
创建一个示例表。请注意,集合列的末尾标记为“[]”

CREATE TABLE CollectionsTables
(
  Id SERIAL UNIQUE,
  Collection  StringIntPairType[],
  Description TEXT,
  TS TIMESTAMP NOT NULL DEFAULT now()
)
插入包含两个字典元素的单个记录

INSERT INTO CollectionsTables(Collection,Description) VALUES
(
    array
    [
       ('Test1',1)::StringIntPairType,
       ('Test2',2)::StringIntPairType
    ],
    'Description1'
);
INSERT INTO CollectionsTables(Collection,Description) VALUES
        (
            array
            [
               ('TestA',30)::StringIntPairType,
               ('TestB',40)::StringIntPairType
            ],
            'Description2'
        );
插入另一条包含两个字典元素的记录

INSERT INTO CollectionsTables(Collection,Description) VALUES
(
    array
    [
       ('Test1',1)::StringIntPairType,
       ('Test2',2)::StringIntPairType
    ],
    'Description1'
);
INSERT INTO CollectionsTables(Collection,Description) VALUES
        (
            array
            [
               ('TestA',30)::StringIntPairType,
               ('TestB',40)::StringIntPairType
            ],
            'Description2'
        );
请注意,这是一个常规表,与任何其他表一样

SELECT * FROM CollectionsTables
这里有一些更高级的选择

SELECT Collection[1].k,Description FROM CollectionsTables
第一列:第一个字典值的键
第二列:描述列查看

更新: 下面是一个完整的示例,说明如何从pgsql实现这一点

定义字典的元素类型

CREATE TYPE StringIntPairType AS (k text,v int);
创建一个示例表。请注意,集合列的末尾标记为“[]”

CREATE TABLE CollectionsTables
(
  Id SERIAL UNIQUE,
  Collection  StringIntPairType[],
  Description TEXT,
  TS TIMESTAMP NOT NULL DEFAULT now()
)
插入包含两个字典元素的单个记录

INSERT INTO CollectionsTables(Collection,Description) VALUES
(
    array
    [
       ('Test1',1)::StringIntPairType,
       ('Test2',2)::StringIntPairType
    ],
    'Description1'
);
INSERT INTO CollectionsTables(Collection,Description) VALUES
        (
            array
            [
               ('TestA',30)::StringIntPairType,
               ('TestB',40)::StringIntPairType
            ],
            'Description2'
        );
插入另一条包含两个字典元素的记录

INSERT INTO CollectionsTables(Collection,Description) VALUES
(
    array
    [
       ('Test1',1)::StringIntPairType,
       ('Test2',2)::StringIntPairType
    ],
    'Description1'
);
INSERT INTO CollectionsTables(Collection,Description) VALUES
        (
            array
            [
               ('TestA',30)::StringIntPairType,
               ('TestB',40)::StringIntPairType
            ],
            'Description2'
        );
请注意,这是一个常规表,与任何其他表一样

SELECT * FROM CollectionsTables
这里有一些更高级的选择

SELECT Collection[1].k,Description FROM CollectionsTables
第一列:第一个字典值的键
第二列:描述列

您可以使用,甚至可以应用于它。
这可能是一个好方法,也可能不是一个好方法,这取决于您需要对数据做什么以及如何构建您的系统。

您可以使用,甚至可以应用于它。


这可能是一个好方法,也可能不是一个好方法,这取决于您需要对数据做什么以及如何构建您的系统。

虽然JSON(或JSONB)数据类型应该是上述首选答案,但您也可以选择使用。缺点是hstore只存储字符串,因此不会键入Int。

虽然JSON(或JSONB)数据类型应该是上述首选答案,但您也可以选择使用。缺点是hstore只存储字符串,因此不会键入INT。

使用这种需要将列表存储在一个字段中的DB模式不是一个好主意。在这种情况下,序列化解决方案听起来不错。常见的方法是什么?使用序列化数据保存文件,还是将序列化数据保存为ByTestStream?最后我认为是一样的。在这件事上我是个傻瓜。当然是字节数组。为什么你甚至需要一个文件。@ManfredSinger请再看一看我的示例,我添加了一个完整的示例代码,说明如何在pg sql中实现此功能。有人能解释一下,为什么我被阻止提问吗?怎么了?好的,在我的第一篇文章中,我没有格式化。这是改变了。但为什么我会被阻止呢?拥有这样的数据库模式不是一个好主意,它需要将列表存储在一个字段中。在这种情况下,序列化解决方案听起来不错。常见的方法是什么?使用序列化数据保存文件,还是将序列化数据保存为ByTestStream?最后我认为是一样的。在这件事上我是个傻瓜。当然是字节数组。为什么你甚至需要一个文件。@ManfredSinger请再看一看我的示例,我添加了一个完整的示例代码,说明如何在pg sql中实现此功能。有人能解释一下,为什么我被阻止提问吗?怎么了?好的,在我的第一篇文章中,我没有格式化。这是改变了。但我为什么被阻止?我有一个datagridview。它的每一行代表一次测量运行。我还有一张图表。如果双击特定行,图表视图将显示所选运行的特定模拟值。如字典所述,这些值应该保存在相应数据库行的一个单元格中。它的每一行代表一次测量运行。我还有一张图表。如果双击特定行,图表视图将显示所选运行的特定模拟值。作为字典提到的值应保存在相应数据库行的一个单元格中。这只允许存储单个字符串/int对,而不是如上所述的字典(或对集合)。@ShayRojansky我可以清楚地理解建议的类型表示集合中的单个元素。幸运的是pg支持数组…@ShayRojansky为了方便起见,我添加了一个完整的示例代码,包括arraysThis的用法。这只允许存储单个字符串/整数对,而不允许像上面所说的那样存储字典(或对集合)。@ShayRojansky我可以清楚地理解建议的类型表示集合中的单个元素。幸运的是pg支持数组…@ShayRojansky为了方便起见,我添加了一个完整的示例代码,包括数组的用法