我已使用以下函数将数据库中的表内容写入磁盘。
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;
}
此功能的目的是备份表格。
现在我想反过来:将表读回(空)数据库。我已经四处寻找并尝试了几件事,但仍然没有成功。
在你告诉我还有其他方法进行备份之前:有几十个客户已经使用上述方法备份了他们的数据库,所以我需要一个反向功能。不要告诉我这是不可能的:)
答案 0 :(得分:2)
BinaryFormatter具有Deserialize功能。
答案 1 :(得分:1)
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/en-us/library/system.data.common.dataadapter.update.aspx和http://msdn.microsoft.com/en-us/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);