2016-03-03 63 views
0

我的數據庫有一個像字段: ID(nvarchar的),開始日期(日期),結束日期(日期),狀態(位)我如何保存解析的HTML到一個數據庫和數據庫中的比較值

我目前正在解析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行。

起初,我想過一個ArrayList中存儲解析HTML以比較然而數據庫 - 我現在需要存儲解析信息進入數據庫(除非日期/狀態是不同的)

在先進的感謝對該

+1

目前尚不清楚你在哪裏卡住。理想情況下,您將構建一個表示數據的一個「對象」的類(少數值)。該類將包含比較它們的邏輯。根據數據庫中的內容構建類的實例,根據HTML中的內容構建另一個實例,並比較類的兩個實例。看起來你可能會讓這個過於複雜。 – David

+0

你能告訴我一個比較它們的邏輯的例子嗎?我不太清楚我怎麼也找不到可靠的資源 – Havoux

+0

那麼,你已經描述了一些邏輯:'「如果日期或狀態相差超過7天,或狀態顯示不活動而不是活動」'你是否詢問如何比較兩個'DateTime'值來查看它們是否超過7天?如何比較兩個字符串值以查看它們是否不同?老實說,問題並不清楚。 – David

回答

0

我認爲有任何幫助是有關如何處理此數據的困惑:

1)數據屬於你的情況下,數據層(MySQL服務器),並應該總是僅存儲數據,而不是演示相關信息

2)的HTML代碼屬於表示層(饋送到瀏覽器中顯示的信息)

好的,足夠的理論。在你的情況下:

1)定義從Web獲取的數據表。例如。

WEBDATA

ProductId INT 
TheDate DATE 
SerialCode VARCHAR(128) 

2)解析HTML文件,並插入到WEBDATA表之前轉換數據。日期可以使用分析器DateTime.Parse,DateTime.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

+0

1)我是一個白癡,idk爲什麼我沒有想到 - 我卡住了,我開始反思事物。 2)我的網頁日期出來YYYY/MM/DD可以將DateTime.TryParseExact自動轉換爲DD/MM/YYYY嗎? 3)最後一行是一個內聯權利? – Havoux

+0

2)TryParse /精確地將任何字符串表示轉換爲DateTime。強烈建議將日期時間存儲爲數據庫中的DateTime,以便輕鬆地進行計算,排序等。DD/MM/YYYY只是顯示日期(演示文稿)的一種方式。是的,INNER JOIN(我會修正它,因爲我習慣於隱含INNER的T-SQL)。 – Alexei

+0

所以我創建的循環程序通過300個左右的序列 - 所以每次它循環我應該將我解析的字符串+日期時間的HTML字符串轉換並將這些值存儲到我的數據庫中的一個單獨的表中 - 所有循環完成後當我應該做兩個表格之間的比較。它是否正確? – Havoux