Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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#_Sql_Sqlite - Fatal编程技术网

C# 在数据库中存储数组

C# 在数据库中存储数组,c#,sql,sqlite,C#,Sql,Sqlite,我有一个2048倍的列表,代表信号中不同样本的振幅。我不断地对信号进行重新采样(比如说每秒20次),并希望将数据存储在SQL数据库中 信号的一次完整测量如下所示: List<double> sineCurve = new List<double>(); for (int i = 0; i < 2048; ++i) { sineCurve.Add(50 + 50 * Math.Sin(i / Math.PI)); } 这是存储此类数据的首选方式吗 编辑:我想

我有一个2048倍的列表,代表信号中不同样本的振幅。我不断地对信号进行重新采样(比如说每秒20次),并希望将数据存储在SQL数据库中

信号的一次完整测量如下所示:

List<double> sineCurve = new List<double>();

for (int i = 0; i < 2048; ++i)
{
   sineCurve.Add(50 + 50 * Math.Sin(i / Math.PI));
}
这是存储此类数据的首选方式吗


编辑:我想运行一个测试,在这个测试中,数据会连续几天收集并保存到数据库中。然后,我希望通过在每个样本列表中查找特定模式、最小/最大值等来处理数据

您应该提前知道希望对数据运行何种查询。在保存记录之前找到这些相关值,并将其放在单独的字段中。否则,将数组以二进制形式保存在blob字段中


如果您发现其他查询,则必须通过选取所需的值来重新处理blob值。

我将创建一个类似这样的表,在该表中,您将所有样本存储在一个blob条目中的测量值中:

CREATE TABLE measurement (id (primary key) ,  generated_at (timestamp), sample (blob), SequenceNr (integer));
然后,如果您想在给定的时间范围内查找测量值,它会像这样:

SELECT m.sample FROM measurement m
WHERE m.generated_at BETWEEN startDate AND endDate
ORDER BY m.SequenceNr;

这似乎根本不是最简单的方法。那么使用varbinary(maxlength)字段的表呢?您还可以创建一个包含度量值、索引和值的表。其中,索引是从0到2048。使用递增索引保存您的值。除非编译sqlite,否则不可能创建包含如此多列的表[除此之外,同意@fealoh这是sqlite,我不确定他们甚至有一个二进制字段你想如何查询这些数据?谢谢你的回答!我有几个问题:1.为什么我需要一个id和一个SequenceNr?它不是同一个数字吗?2.BLOB数据看起来像胡言乱语,对吗?我必须使用一些程序来解决这个问题在有意义之前将其转换回数组?1.sequenceNr用于确保样本的输入顺序。我不会使用ID。2.是的,您可能必须编写一个方法,将其转换回浮点数组。尽管将数据库文件交给某人,然后他们可以使用使用DB浏览器直接查看数据,我肯定看到了使用blob的优势。再次感谢!我想知道该解决方案如何支持“通过在每个样本列表中查找特定模式、最小/最大值等来处理数据”您不能对blob字段运行查询,这就是为什么我建议在保存之前对每条记录进行预处理。@PepitoSh这是一个很好的观点。在这种情况下,我会将每个样本写在一个单独的条目中,我们可以通过SequenceNr和时间戳来识别它所属的度量值,或者可以在度量值和样本以及sto之间添加一个映射表在单独的表格中重新填写,以确定样本所属的测量值。
SELECT m.sample FROM measurement m
WHERE m.generated_at BETWEEN startDate AND endDate
ORDER BY m.SequenceNr;