The error is self explanatory:
No mapping exists from object type System.Byte[,,] to a known managed provider native type.
You can't just throw a 3D array at an SQL Binary field and expect it to work out what to do with it: it just stores data, it doesn't work with higher level constructs such as multidimensional arrays. So when you try, the framework looks at your imsgArray.Data and can't convert it to a one dimensional array of bytes automatically.
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, imsgArray.Data);
byte[] data = ms.ToArray();
You can then pass the
data
to SQL, and unserialize it when you retrieve it.