繁体   English   中英

序列化/反序列化数据集(作为备份数据的一种方式)

[英]Serialize/deserialize DataSet (as a way to backup my data)

我已使用以下功能将数据库中表的内容写入磁盘。

private static Stream GetTableAsBinary(string table, OleDbConnection oleDbConnection)
{
    var oleDbDataAdapter = new OleDbDataAdapter(string.Format("select * from {0}", table), oleDbConnection);
    var dataSet = new DataSet();
    oleDbDataAdapter.Fill(dataSet, table);
    dataSet.RemotingFormat = SerializationFormat.Binary;
    var format = new BinaryFormatter();
    var memStream = new MemoryStream();
    format.Serialize(memStream, dataSet);
    return memStream;          
}

此功能的目的是备份表。

现在,我想做相反的事情:将表读回到一个(空)数据库中。 我四处搜寻并尝试了一些方法,但仍未成功。

在您告诉我还有其他备份方法之前:几十个客户已经使用上述方法备份了数据库,因此我需要一个反向功能。 而且不要告诉我这是不可能的:)

BinaryFormatter具有反序列化功能。

private static T DeserializeObject<T>(MemoryStream memory) where T : class // might need to check the constraint.
{
BinaryFormatter formatter = new BinaryFormatter();
return formatter.Deserialize(stream) as T;
}

用法:

DataSet ds = DeSerializeObject<DataSet>(stream);

对于OleDbAdapter部分,请访问http://msdn.microsoft.com/zh-cn/library/system.data.common.dataadapter.update.aspxhttp://msdn.microsoft.com/zh-cn/ library / system.data.oledb.oledbdataadapter.aspx-您最终将得到如下结果:

var oleDbAdapter = new OleDbAdapter("select * from...", table, oleDbConnection);
oleDbAdapter.InsertCommand = new OleDbCommand("insert into mytable values (?,?)");
oleDbAdapter.UpdateCommand = new OleDbCommand("update mytable values foo = ?, bar =? where mykey = ?");
oleDbAdapter.DeleteCommand = new OleDbCommand("delete from mytable where mykey = ?");

oleDbAdapater.InsertCommand.Paramaters.Add(...);
oleDbAdapater.UpdateCommand.Paramaters.Add(...);
oleDbAdapater.DeleteCommand.Paramaters.Add(...);

oleDbAdapater.Update(ds);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM