Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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# 如何将double数组存储到数据库的varbinary数据类型中?_C#_.net_Sql_Database_Ado.net - Fatal编程技术网

C# 如何将double数组存储到数据库的varbinary数据类型中?

C# 如何将double数组存储到数据库的varbinary数据类型中?,c#,.net,sql,database,ado.net,C#,.net,Sql,Database,Ado.net,我有一个要存储到数据库表中的对象。表条目由该对象的所有属性组成。这些属性之一是一个双精度数组。每个对象的此数组的值可能从4000到100000不等。我之前尝试创建两个表,一个用于大多数属性,另一个包含这些双值。然后在两者之间建立关系。我意识到,当我将对象转移到表中时,将点转移到第二个表中需要相当长的时间。这就像每个对象有数千个查询。所以,我的第二个计划是获取这个double数组,并将它们全部放在表中的varbinary(max)条目中 我得到的回答是,这是可能的,但我不知道怎么做。假设您已经将d

我有一个要存储到数据库表中的对象。表条目由该对象的所有属性组成。这些属性之一是一个双精度数组。每个对象的此数组的值可能从4000到100000不等。我之前尝试创建两个表,一个用于大多数属性,另一个包含这些双值。然后在两者之间建立关系。我意识到,当我将对象转移到表中时,将点转移到第二个表中需要相当长的时间。这就像每个对象有数千个查询。所以,我的第二个计划是获取这个double数组,并将它们全部放在表中的varbinary(max)条目中


我得到的回答是,这是可能的,但我不知道怎么做。

假设您已经将double写入了一个流(在本例中名为_pictureContent),那么您可以使用AddWithValue作为sqlCommand参数将其写入

command.Parameters.AddWithValue(“@PictureContent”,_PictureContent)

要重新阅读,请执行以下操作:

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

long bufferSize=dataReader.IsDBNull(字段\缓冲区大小)?0:dataReader.GetInt64(字段大小)
如果(缓冲区大小>0)
{
j、 PictureContent=新字节[bufferSize];
bufferSize=dataReader.GetBytes(字段_PICTURECONTENT,0,_PICTURECONTENT,0,Convert.ToInt32(bufferSize));
}


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

假定已将double写入流(在本例中命名为_pictureContent),则使用AddWithValue作为sqlCommand参数将其写入

command.Parameters.AddWithValue(“@PictureContent”,_PictureContent)

要重新阅读,请执行以下操作:

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

long bufferSize=dataReader.IsDBNull(字段\缓冲区大小)?0:dataReader.GetInt64(字段大小)
如果(缓冲区大小>0)
{
j、 PictureContent=新字节[bufferSize];
bufferSize=dataReader.GetBytes(字段_PICTURECONTENT,0,_PICTURECONTENT,0,Convert.ToInt32(bufferSize));
}


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

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