1

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

我得到的答复说这是可能的,但我不明白该怎么做。

4

1 回答 1

1

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

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

要读回它:

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

长缓冲区大小 = dataReader.IsDBNull(FIELD_BUFFERSIZE) ?0 : dataReader.GetInt64(FIELD_BUFFERSIZE);
if (bufferSize > 0)
{
j.PictureContent = new byte[bufferSize];
bufferSize = dataReader.GetBytes(FIELD_PICTURECONTENT, 0, _pictureContent, 0, Convert.ToInt32(bufferSize));
}

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

于 2013-07-22T20:56:41.457 回答