如何将解析的 HTML 存储到数据库中并比较数据库中的值

本文关键字:数据库 比较 HTML 存储 | 更新日期: 2023-09-27 18:37:09

我的数据库有这样的字段:ID(nvarchar), 开始日期(日期), 结束日期(日期), 状态(位)

我目前正在从网站解析 HTML,以便比较 2 个值(1 个来自我的本地数据库,其他来自网站)以确定它们是否相同。如果它们是相同的值 - 完美。但是,如果日期或状态相差超过 7 天或状态显示非活动而不是活动(反之亦然),我希望它"添加到最终报告",在它遍历所有值后,在桌面上存储一个报告.txt文件(不确定仍然)

        SqlConnection conn = new SqlConnection(Properties.Settings.Default.LenovoWarrantyConnectionString);
        conn.Open();
        ArrayList lenovolist = new ArrayList();
        SqlCommand myCommand = conn.CreateCommand();
        myCommand.CommandText = ("SELECT SerialNumber from Warranty");
        SqlDataReader myReader = myCommand.ExecuteReader();
        int count = myReader.FieldCount;
        while (myReader.Read())
        {
            for (int i = 0; i < count; i++)
            {
                //Loop through Serial Numbers
                string result = myReader.GetValue(i).ToString();
                //Iterate through Lenovo's Serial Checker 1 by 1
                webBrowser1.Document.GetElementById("serialCode").Focus();
                webBrowser1.Document.GetElementById("serialCode").InnerText = result;
                webBrowser1.Document.GetElementById("warrantySubmit").InvokeMember("Click");
                Thread.Sleep(500);
                MessageBox.Show("Script Completed");
                //Get System Summary Info
                foreach (HtmlElement el in webBrowser1.Document.GetElementsByTagName("div"))
                    if (el.GetAttribute("className") == "fluid-row firstfluid")
                    {
                        var record = el.InnerText;
                        lenovolist.Add(record);
                        //MessageBox.Show(record, "System Summary");
                    }
                //Get Base Warranty, Warranty Upgrade, and Priority Support
                foreach (HtmlElement el in webBrowser1.Document.GetElementsByTagName("div"))
                    if (el.GetAttribute("className") == "fluid-row Borderfluid")
                    {
                        var record1 = el.InnerText;
                        lenovolist.Add(record1);
                        MessageBox.Show(record1, "Base Warranty, Warranty Upgrade, Priority Support");
                    }
            }
        }
        foreach (var items in lenovolist)
        {
            MessageBox.Show(items.ToString());
        }

我在数据库中有大约 300~ 行。

起初我想过将解析的 HTML 存储在数组列表中以便与数据库进行比较 - 我现在需要将解析的信息存储到 db 中(除非日期/状态不同)

提前感谢您在这方面的任何帮助

如何将解析的 HTML 存储到数据库中并比较数据库中的值

我认为这里有一个与如何处理数据有关的混乱:

1)数据属于数据层(在您的情况下为MySQL服务器),并且几乎总是应该只存储数据,而不是与表示相关的信息

2)HTML代码属于表示层(馈送到浏览器显示信息)

好的,理论够多了。在您的情况下:

1) 为从 Web 获取的数据定义一个表。例如

网站数据

ProductId INT
TheDate DATE
SerialCode VARCHAR(128)

2) 解析 Html 文件并在插入到 WebData 表之前转换数据。Date可以使用DateTime.Parse,DateTime.TryParse或确切的对应物 - DateTime.ParseExact 或DateTime.TryParseExact (我推荐最后一个)进行解析。

3)您可以发出如下所示的选择(DateDiff用于检查该时间跨度)

SELECT (CASE WHEN DATEDIFF(W.TheDate, P.EndDate) > 7 THEN 0 ELSE 1 END) AS IsActive, <other info here>
FROM Product P
   INNER JOIN WebData W ON W.ProductId = P.ProductId

当然,这可以转换为更新以维护Status