【问题标题】:How to store an array of doubles, into a varbinary datatype, to a database?如何将双精度数组以 varbinary 数据类型存储到数据库中?
【发布时间】:2013-07-22 20:40:57
【问题描述】:

我有一个要存储到数据库表中的对象。表条目由该对象的所有属性组成。其中一个属性是一个双精度数组。每个对象的这个数组可能有大约 4,000 到 100,000 个值。我之前尝试创建两个表,一个用于大多数属性,另一个包含这些双精度值。然后建立两者之间的关系。我意识到,当我将对象转移到桌子上时,需要花费大量时间才能将积分放到第二张桌子上。这就像每个对象有数千个查询。所以,我的第二个计划是获取这个双精度数组并将它们全部放在表中的 varbinary(max) 条目中。

我收到了回复说这是可能的,但我不明白该怎么做。

【问题讨论】:

  • 最简单的方法是将您的双精度数组转换为字节数组,然后将字节数组存储到您的 varbinary 字段中。有关将双精度数组转换为字节数组的方法,请参见此答案。stackoverflow.com/a/6953111/1181408。如果您需要有关 sql 上下文的帮助,请参阅此答案。 stackoverflow.com/a/4057802/1181408

标签: c# .net sql database ado.net


【解决方案1】:

假设您已将双打写入流(在本例中名为 _pictureContent),您可以使用 AddWithValue 作为 sqlCommand 参数将其写入。

command.Parameters.AddWithValue("@PictureContent", _pictureContent);

再读一遍:

我将“buffersize”作为单独的列存储在表中,所以当我阅读它时,我知道其中是否有任何内容。如果我这样做了,我会使用 GetBytes 来读取 varbinary 列。

long bufferSize = dataReader.IsDBNull(FIELD_BUFFERSIZE) ? 0 : dataReader.GetInt64(FIELD_BUFFERSIZE);
如果 (bufferSize > 0)
{
j.PictureContent = 新字节[bufferSize];
bufferSize = dataReader.GetBytes(FIELD_PICTURECONTENT, 0, _pictureContent, 0, Convert.ToInt32(bufferSize));
}

FIELD_PICTURECONTENT 是传入的列集合中的偏移量(即第 5 列),第一个 0 是传入流中要读取的起始位置,_picture content 是目标字节数组,第二个 0 是偏移量在字节数组中写入,(buffersize) 是要读取的字节数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 2011-03-17
    • 2018-10-19
    • 2013-12-06
    • 1970-01-01
    • 2012-12-27
    相关资源
    最近更新 更多