出于某种原因,我不得不将 DataTable 变量存储在 SQL Server 表的 Varbinary
列中,但出现错误。
这是商店代码:
// Read DataTable to Byte array
DataTable dtgrd = new DataTable();
Dataaccess ds = new Dataaccess();
DataSet dst = new DataSet();
dst.Tables.Add(dtgrd);
string xmlString = dst.GetXml();
MemoryStream ms = new MemoryStream();
XmlDocument xml = new XmlDocument();
xml.LoadXml(xmlString);
xml.Save(ms);
byte[] xmlBytes = ms.ToArray();
// Store DataTable into database
SqlConnection CN = new SqlConnection(Global.cs);
string str = @"INSERT INTO...... ";
SqlCommand SqlCom = new SqlCommand(str,CN);
SqlCom.Parameters.Add(new SqlParameter("@FKDocInReqID",FKDocInReqID));
SqlCom.Parameters.Add(new SqlParameter("@value",(object)xmlBytes));
SqlCom.Parameters.Add(new SqlParameter("@Data",ReportTitle));
SqlCom.Parameters.Add(new SqlParameter("@DocUploadUser_secuserID",Global.S_UserID));
CN.Open();
decimal id =(decimal) SqlCom.ExecuteScalar();
CN.Close();
商店代码工作正常,并且在数据库中,列具有正确的字节。
但检索代码不起作用:
string s = @"select * from .... where id={0} ";
s = string.Format(s,id);
DataTable dt = new DataTable();
dt = ds.doSelect(s);
using (System.IO.MemoryStream memStream1 = new System.IO.MemoryStream((byte[])dt.Rows[0]["Value"]))
{
dataGridView1.DataSource = FromBytes(memStream1.ToArray());
dataGridView1.Refresh();
dataGridView1.Show();
}
和
static DataTable FromBytes(byte[] arr)
{
using (var ms = new MemoryStream(arr))
{
return (DataTable)new BinaryFormatter().Deserialize(ms);//**ERROR Raised Here**
}
}
static byte[] ToBytes(DataTable table)
{
using (var ms = new MemoryStream())
{
table.RemotingFormat = SerializationFormat.Binary;
new BinaryFormatter().Serialize(ms,table);
return ms.ToArray();
}
}
引发此错误: