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

时间:2016-03-03 14:34:27

标签: c# html mysql parsing compare

我的数据库包含以下字段: ID(nvarchar),开始日期(日期),结束日期(日期),状态(位)

我目前正在从网站解析HTML,以便比较2个值(1来自我的本地数据库,其他来自网站)以确定它们是否相同。如果它们是相同的值 - 完美。但是,如果日期或状态相差超过7天或状态显示为非活动而非活动(反之亦然),我希望它添加到最终报告'在经过所有值后,在桌面上存储一个report.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存储在arraylist中以便与数据库进行比较 - 我现在需要将解析后的信息存储到数据库中(除非日期/状态不同)

感谢您提前获取此

中的任何帮助

1 个答案:

答案 0 :(得分:0)

我认为这里有关于如何处理数据的混淆:

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

2)Html代码属于表示层(提供给浏览器以显示信息)

好的,足够的理论。在你的情况下:

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

<强> WEBDATA

ProductId INT
TheDate DATE
SerialCode VARCHAR(128)

2)解析Html文件并在插入WebData表之前转换数据。日期可以使用DateTime.ParseDateTime.TryParse或完全对应的解析器 - DateTime.ParseExactDateTime.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的更新。