【问题标题】:Serialize/deserialize DataSet (as a way to backup my data)序列化/反序列化数据集(作为备份数据的一种方式)
【发布时间】:2011-03-14 17:24:30
【问题描述】:

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

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;          
}

这个函数的目的是对表格进行备份。

现在我想做相反的事情:将表读回(空)数据库。我已经四处搜索并尝试了几件事,但仍然不成功。

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

【问题讨论】:

标签: c# .net sql database dataset


【解决方案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.aspxhttp://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);

【讨论】:

    【解决方案2】:

    BinaryFormatter 有Deserialize 函数。

    【讨论】:

    • 是的,我看到了。但是接下来呢:我需要 OleDbDataAdapter 来取回数据吗?
    • 当然,如果你想把所有数据放回数据库。
    猜你喜欢
    • 2018-08-05
    • 2014-11-18
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    相关资源
    最近更新 更多