回答

收藏

保存多维字节数组SQL Server数据库

技术问答 技术问答 230 人阅读 | 0 人回复 | 2023-09-14

我想保存多维字节数组SQL Server数据库。, p2 c8 Z8 b8 Y
我知道如何保存字节数组,这是图像到数据库的转换。因此,我使用的数据类型是image。但现在我想存储另一个字节数组,它是多维字节数组byte[,] temp,它具有带有x,y值的二维。
# o  V+ t4 e+ u7 d, i" P5 ]我在互联网上搜索过,在这里,据说是使用VARBINARY格式。我只想知道多维数组是否存在。VARBINARY这些值会在数据类型数据列中发生变化吗?数据可以再次接收到多维数组吗?( d5 P& F" @4 H" G3 t4 e
                                                                : m, ~4 P5 B+ W1 X: i2 A
    解决方案:                                                               
* I% `. t( M* n+ ~/ ~' G6 ^# H( n                                                                是的,您将能够在不改变的情况下恢复多维数组。8 ~) Y- n2 V) B& C
你怎么能这样做?    在Sql
. @* [7 c1 F  h) v1 p% O. KServer中使用Varbinary(max)将序列化的多维字节数组保存到字段中。为了使阵列恢复正常,您需要反序列化存储在数据库中的内容。
. ?- u0 J2 J4 x; J如何做到这一点:6 O. \, M/ D# W
public void TestSO(){     using (SqlConnection conexion = new SqlConnection()using (SqlCommand command = new SqlCommand())        {            //This is the original multidimensional byte array            byte[,] byteArray = new byte[2,2] {1,0},{0,1}ConnectionStringSettings conString = ConfigurationManager.ConnectionStrings["ConnectionString"];            conexion.ConnectionString = conString.ConnectionString;            conexion.Open();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;command.Connection = conexion;            command.CommandType = CommandType.Text;            command.CommandText = "UPDATE Table SET VarBinaryField = @Content WHERE Id = 73 ";            command.Parameters.Add(new SqlParameter("@Content",SqlDbType.VarBinary,-1);            Serialize the multidimensional byte array to a byte[]                    BinaryFormatter bf = new BinaryFormatter();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MemoryStream ms = new MemoryStream();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;bf.Serialize(ms,byteArray);      Set the serialized original array as the parameter value for the query            command.Parameters["@Content"].Value = ms.ToArray();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;if (command.ExecuteNonQuery() > 0)            {          This method returns the VarBinaryField from the database (what we just saved)                byte[] content = GetAttachmentContentsById(73);          Deserialize Content to a multidimensional array                MemoryStream ms2 = new MemoryStream(content);                byte[,] fetchedByteArray = (byte[,])bf.Deserialize(ms2);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;At this point,fetchedByteArray is exactly the same as the original byte array
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则