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为了方便起见,我添加了一个完整的示例代码,包括数组的用法