我想保存多维字节数组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