Сериализация / десериализация DataSet (как способ резервного копирования моих данных) - PullRequest
1 голос
/ 12 июля 2010

Я записал содержимое таблицы в своей базе данных на диск, используя следующую функцию.

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

Цель этой функции - создать резервную копию таблицы.

Теперь я хочу сделать обратное: прочитать таблицу обратно в (пустую) базу данных.Я искал и попробовал несколько вещей, но все еще безуспешно.

Прежде чем вы скажете мне, что есть другие способы сделать резервную копию: пара десятков клиентов уже сделали резервную копию своей базы данных, используя метод вышепоэтому мне нужна обратная функция.И не говори мне, что это невозможно:)

Ответы [ 2 ]

2 голосов
/ 12 июля 2010

Двоичный формат имеет функцию Десериализация .

1 голос
/ 12 июля 2010
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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...