【问题标题】: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) 条目中。
我收到了回复说这是可能的,但我不明白该怎么做。
【问题讨论】:
标签:
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) 是要读取的字节数。