保存和恢复数据表c#的最佳方法

问题描述 投票:0回答:3

我开发了一个

WinForm
c#应用程序,现在添加了一个恢复选项,这样如果它意外关闭等,一切都可以在新的运行中恢复。

我已经成功恢复了几乎所有内容(列表、整数、字符串等...) 我面临的唯一问题是恢复

DataTable
。在我的应用程序运行期间,记录会添加到此
DataTable
,最终用户可以将其导出到 csv。

我尝试将

DataTable
添加到
Properties.Settings.Default
...但它在新运行中不起作用,我总是将其视为
Null

有关保存和恢复的最佳方法的任何建议

DataTable
请记住,它们的记录在运行期间可能会超过 10-15 k。

谢谢你

c# winforms visual-studio-2010 crash restore
3个回答
4
投票

Properties.Settings
可以存储字符串数据,因此您可以序列化您的
DataTable
并存储它。稍后您可以反序列化该字符串以获得
DataTable
。您可以使用JSON.Net,例如:

var serializedDt = JsonConvert.SerializeObject(dt);
//store the string

取回:

DataTable yourDataTable = JsonConvert.DeserializeObject<DataTable>(serializedDt);

还要补充一点,如果您期望大量数据,那么您可以考虑在客户端的数据库中存储数据的选项,例如Sqlite


1
投票

序列化对象,但将其放入恢复文件中。 在恢复开始期间只需读取文件,您不必担心空间。


0
投票

您可以使用“扩展方法”方法,向应用程序添加静态类来扩展 DataTable 对象的功能。 方法中“type”之前的“this”修饰符告诉编译器这将是基本类型的扩展。

因此,每当您声明 DataTable 对象时,您都可以使用这个新方法,并且您可以注意到,当您调用该方法时,受“this”修饰符影响的参数不会出现。

此示例依赖于 Newtonsoft.json(Nuget 包)。

数据表 dt = new()

...

dt.LoadFromFile(“myjsonfile.json”);

...做一些事情...

dt.SaveToFile(“myjsonfile.json”);

public static class DataTableHelper
{
    /// <summary>
    /// Save DataTable content to Json File
    /// </summary>
    /// <param name="fileName"></param>
    /// <returns></returns>
    public static bool SaveToFile( this  DataTable dt, string fileName )
    {
        try
        {
            File.WriteAllText(fileName, JsonConvert.SerializeObject(dt, Formatting.Indented));
        }
        catch
        {
            return false;
        }
        return true;
    }

    /// <summary>
    /// Load Json File into DataTable
    /// </summary>
    /// <param name="fileName"></param>
    /// <returns></returns>
    public static int LoadFromFile(this DataTable dt, string fileName)
    {
        try
        {
            string data = File.ReadAllText(fileName);
            dt = JsonConvert.DeserializeObject<DataTable>(data);
        }
        catch
        {
            return 0;
        }
        return dt.Rows.Count;
    }
}

您可以在此链接中了解有关扩展方法的更多信息:

C# 中的扩展方法,Microsoft Link

© www.soinside.com 2019 - 2024. All rights reserved.