【问题标题】:How to Store data without using Database and how to retrieve them?如何在不使用数据库的情况下存储数据以及如何检索它们?
【发布时间】:2010-04-09 23:36:33
【问题描述】:

我正在解析 html 文件以通过列名提取表格信息。我想让用户输入列名。并根据该列名提取表格信息。

现在用户将输入的列名,基于该列名,我想从 html 文件中查找表格信息。

但是我应该在哪里存储用户输入的这个列名?以及如何找回它们?我不想使用数据库。

编辑:我们如何将数据存储在 xml 文件中,我们如何从中检索数据,以及我们如何更新 xml 文件以存储数据?就像我有 3 个列名 Name, Address,Phone no 并且该用户将输入可能的列名,例如 Nm,Add,PhNo.Nam,Addre,PhoNo 等等。

【问题讨论】:

  • @Harikrishna:你使用的是什么版本的框架?
  • @Frank,嗨..我正在使用 Visual Studio 2008。

标签: c# .net winforms


【解决方案1】:

很多人都在谈论 XML,这是一个好主意。但是,如果您可以使用 Linq,您应该真的考虑使用 Linq to XML 而不是 SAX/DOM 解析。

与 SAX 和 DOM 解析器相比,Linq to XML 更容易解析、创建和编辑 XML 文件。使用 SAX/DOM 解析通常需要大量循环才能到达正确的元素或通过节点导航。

来自 MSDN 的示例:
使用 DOM 解析:

XmlDocument doc = new XmlDocument();
XmlElement name = doc.CreateElement("Name");
name.InnerText = "Patrick Hines";
XmlElement phone1 = doc.CreateElement("Phone");
phone1.SetAttribute("Type", "Home");
phone1.InnerText = "206-555-0144";        
XmlElement phone2 = doc.CreateElement("Phone");
phone2.SetAttribute("Type", "Work");
phone2.InnerText = "425-555-0145";        
XmlElement street1 = doc.CreateElement("Street1");        
street1.InnerText = "123 Main St";
XmlElement city = doc.CreateElement("City");
city.InnerText = "Mercer Island";
XmlElement state = doc.CreateElement("State");
state.InnerText = "WA";
XmlElement postal = doc.CreateElement("Postal");
postal.InnerText = "68042";
XmlElement address = doc.CreateElement("Address");
address.AppendChild(street1);
address.AppendChild(city);
address.AppendChild(state);
address.AppendChild(postal);
XmlElement contact = doc.CreateElement("Contact");
contact.AppendChild(name);
contact.AppendChild(phone1);
contact.AppendChild(phone2);
contact.AppendChild(address);
XmlElement contacts = doc.CreateElement("Contacts");
contacts.AppendChild(contact);
doc.AppendChild(contacts);

使用 Linq to XML:

XElement contacts =
    new XElement("Contacts",
        new XElement("Contact",
            new XElement("Name", "Patrick Hines"),
            new XElement("Phone", "206-555-0144", 
                new XAttribute("Type", "Home")),
            new XElement("phone", "425-555-0145",
                new XAttribute("Type", "Work")),
            new XElement("Address",
                new XElement("Street1", "123 Main St"),
                new XElement("City", "Mercer Island"),
                new XElement("State", "WA"),
                new XElement("Postal", "68042")
            )
        )
    );

更容易操作,更清晰。

编辑:
将 XML 树保存到 contacts.xml :

// using the code above
contact.Save("contacts.xml");

加载contacts.xml文件:

//using the code above
XDocument contactDoc = XDocument.Load("contacts.xml"); 

要更新树的元素,doc 中有一些函数可以根据您的需要执行此操作

【讨论】:

  • 您能否扩展您的答案以针对问题的编辑版本?您很好地说明了 2.0 和 3.5 中 XML 文档初始化之间的编程差异,但没有说明如何更新、序列化等。
  • @Dathan : 好了,希望对你有帮助:)
【解决方案2】:

也许您可以序列化 DataTable,但请记住,如果您用数据填充它,这可能会变得很大并且需要大量时间来序列化或反序列化。如果数据以其他方式存储,您可能希望将列信息存储在配置/项目文件中。

HTH, -sa

【讨论】:

  • @Sascha,数据将几乎是 10 行和 10 列的最大值。
【解决方案3】:

使用数据库。如果您不想麻烦设置客户端/服务器架构,请使用SQLite,它有多个 .Net 化身,或SQL Server Express

【讨论】:

    【解决方案4】:

    数据库的替代方案是:http://www.filehelpers.com/

    【讨论】:

      【解决方案5】:

      如果只有十列,在 App.Config 中存储为分隔字符串怎么样?

      【讨论】:

      • @Simon,我们如何在 App.Config 中存储?
      【解决方案6】:

      您可以使用 XML 文件作为替代方案,尽管使用 SQLite 似乎更可取。 XML 工具位于 System.Xml 命名空间下。您可以使用 XMLReader/Writer 类来管理文件中的信息。 MSDN page上有一些很好的用法示例。

      【讨论】:

      • @n535,如何将数据存储和检索到xml文件?
      • @Harikrishna,你至少需要在这里做一些思考。
      【解决方案7】:

      我认为使用 XML 文件将是您的最佳选择。

      看看这篇文章,它清楚地展示了如何操作 XML 文件。

      http://www.developer.com/article.php/3489611

      HTH

      【讨论】:

        【解决方案8】:

        如果您必须选择但只有一个数据库;然后我会使用 Xml,当文件变大时使用 SAX 解析。

        查看如何Manipulate XML File Data Using C#

        --编辑--

        这是对您的评论的回应。假设您有一个带有以下控件的屏幕:

        1. TextBox as txtColumnName;当用户提供列名并单击添加按钮时,将其保存为 xml 属性。
        2. ComboBox 作为 cbxColumns;选择当前列
        3. TextBox 作为 txtValue;提供时,将值保存在“列”组合中选择的列中。
        4. 添加按钮;您也可以添加删除、更新按钮。

        请浏览示例链接,它将帮助您在运行时添加/删除/更新节点。你可以想出你的 XmlDatabaseWrapper 类来包裹所有的 CRUD 操作。

        【讨论】:

        • @KMan,数据不会超过 10 行乘 10 列。
        • @Harikrishna:好吧,在这种情况下你可以使用 DOM。尽管听起来您不赞成 xml,但如果是这样,那么在这种情况下,我会以二进制形式保存/检索自定义对象。或者更好的 filehelpers.com 看起来像 Aseem 提议的那样值得研究。
        • @KMan,不,我想使用 xml。但是如何将数据存储在用户将输入的 xml 文件中以及如何检索它们?
        • @Harikrishna :这将根据您必须存储的数据而改变。您必须对此进行一些思考。与您考虑如何将数据存储在 DB 中的方式相同,您必须考虑如何将数据保存到 XML 文件中。
        • @Harikrishna:请查看我的编辑以回应您的评论。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-27
        • 1970-01-01
        • 2013-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多