我有一个int
列表,我需要弄清楚如何坚持通过应用程序关闭。不是永远,但是,你得到了这个想法,我不能让它在处理之前消失。处理它的方法将删除列表中的条目。
我有什么选择? XML?
我们有一个WinForm
应用程序,它使用本地SQL Express数据库参与与中央服务器的合并复制。这将很难解释,但我们也有(一种)I系列400服务器,一小部分数据也被写入。由于各种原因,I系列无法通过复制获得,因此所有“写入”都需要在可用时完成。
我首先想到解决这个问题,只需要一个存储需要更新的PK的List对象。然后,在成功同步之后,我将有一个检查该列表的方法,并为列表中的每个PK调用UpdateISeries()
一次。我很确定这会起作用,除非他们关闭不当或失去电力等等。那么,有没有人对如何解决这个问题有更好的想法? XML文件可能,虽然我从来没有这样做过。我担心由于复制而在SQL Express中实际创建一个表......可能没有根据但是......
作为参考,UpdateISeries(int PersonID)
是内部使用的DLL中的现有方法。重写它作为这个问题的潜在解决方案,当时真的不可行。
答案 0 :(得分:3)
听起来你需要序列化和反序列化某些对象。
请参阅these .NET主题以了解更多信息。
从链接页面:
序列化是将对象的状态转换为可以持久或传输的形式的过程。序列化的补充是反序列化,它将流转换为对象。这些过程共同使数据易于存储和传输。
如果磁盘格式对于人类可读而言并不重要,并且您希望它尽可能小,请查看binary serialization。
答案 1 :(得分:1)
使用序列化机制可能是要走的路。以下是使用BinaryFormatter的示例。
public void Serialize(List<int> list, string filePath)
{
using (Stream stream = File.OpenWrite(filePath))
{
var formatter = new BinaryFormatter();
formatter.Serialize(stream, list);
}
}
public List<int> Deserialize(string filePath)
{
using (Stream stream = File.OpenRead(filePath)
{
var formatter = new BinaryFormatter();
return (List<int>)formatter.Deserialize(stream);
}
}
答案 2 :(得分:0)
如果您已经拥有并与SQL数据库交互,请使用它来获取具有较少依赖性的更简单的代码。可以将复制配置为忽略其他表(即使您必须将它们放在另一个模式中)。这样,您就可以避免许多潜在的数据损坏问题。