我的数据库包含以下字段: 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中以便与数据库进行比较 - 我现在需要将解析后的信息存储到数据库中(除非日期/状态不同)
感谢您提前获取此
中的任何帮助答案 0 :(得分:0)
我认为这里有关于如何处理数据的混淆:
1)数据属于数据层(在您的情况下是MySql服务器),应该几乎总是只存储数据,而不是与表示相关的信息
2)Html代码属于表示层(提供给浏览器以显示信息)
好的,足够的理论。在你的情况下:
1)为从Web获取的数据定义一个表。例如。
<强> WEBDATA 强>
ProductId INT
TheDate DATE
SerialCode VARCHAR(128)
2)解析Html文件并在插入WebData表之前转换数据。日期可以使用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
的更新。