[英]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.aspx和http://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.