private void GetData(object satte) { try { db.Execute("delete from " + tableName + ""); } catch { } string html = null; string strField = null; List <List <string> > list = null; StringBuilder sbSql = new StringBuilder(); for (int page = minPage; page <= maxPage; page++) { lblTip.Dispatcher.Invoke(new Action <string>(ShowTip), "当前页码:" + (page + (1 - firstPageIndex)) + "/" + (maxPage + (1 - firstPageIndex))); html = HtmlHandler.GetHtml(url, get, post, pageParamName, page, pageParamPos == "POST"); list = HtmlHandler.ParseBody(detailUrl, html, bodyRegEx, appendBodyRegEx, detailUrlIndex); //sbSql.Clear(); foreach (List <string> item in list) { strField = ""; foreach (string value in item) { strField += "'" + FilterHelper.HtmlFilter(value) + "',"; } if (item.Count != lstHeader.Count) { for (var i = item.Count + 1; i <= lstHeader.Count; i++) { strField += "'',"; } } //sbSql.Append(string.Format("insert into {0}({1}) values({2});", tableName, strHeader.TrimEnd(','), strField.TrimEnd(','))); if ((int)db.GetScalar(string.Format("select count(1) from {0} where {1}='{2}'", tableName, key, item[keyIndex])) > 0) { continue; } db.Execute(string.Format("insert into {0}({1}) values({2});", tableName, strHeader.TrimEnd(','), strField.TrimEnd(','))); } //db.Execute(sbSql.ToString()); } lblTip.Dispatcher.Invoke(new Action <string>(ShowTip), "操作完成"); btnBody.Dispatcher.Invoke(new Action(() => { btnBody.IsEnabled = true; })); btnConn.Dispatcher.Invoke(new Action(() => { btnConn.IsEnabled = true; })); btnHeader.Dispatcher.Invoke(new Action(() => { btnHeader.IsEnabled = true; })); }
private void btnHeader_Click(object sender, RoutedEventArgs e) { btnHeader.IsEnabled = false; btnConn.IsEnabled = false; url = txtUrl.Text.Trim(); detailUrl = txtDetailUrl.Text.Trim(); get = txtGET.Text.Trim(); post = txtPOST.Text.Trim(); pageParamName = txtPageParamName.Text.Trim(); pageParamPos = cbbPageParamPos.SelectedItem.ToString(); if (!int.TryParse(txtFirstPageIndex.Text.Trim(), out firstPageIndex)) { firstPageIndex = 1; } bodyRegEx = txtBodyRegEx.Text.Trim(); headerRegEx = txtHeaderRegEx.Text.Trim(); maxPageRegEx = txtMaxPageRegEx.Text.Trim(); appendHeader = txtAppendHeader.Text.Trim(); appendBodyRegEx = txtAppendBodyRegEx.Text.Trim(); key = txtKey.Text.Trim(); tableName = txtTableName.Text.Trim(); string html = HtmlHandler.GetHtml(url, get, post, pageParamName, 1, pageParamPos == "POST"); lstHeader = HtmlHandler.ParseHeader(html, headerRegEx, maxPageRegEx, out minPage, out maxPage); minPage -= (1 - firstPageIndex); maxPage -= (1 - firstPageIndex); if (!string.IsNullOrEmpty(appendHeader)) { int index = appendHeader.IndexOf('-'); if (index > 0) { int.TryParse(appendHeader.Substring(0, index), out detailUrlIndex); } if (index + 1 < appendHeader.Length) { lstHeader.AddRange(appendHeader.Substring(index + 1).Split(',')); } } if (lstHeader.Count <= 0) { lblTip.Content = "未获取到表头。"; btnHeader.IsEnabled = true; btnConn.IsEnabled = true; return; } try { db.Execute("drop table " + tableName + ""); } catch { } string dataType = connType == "OleDb" ? "text" : "nvarchar(MAX)"; strHeader = ""; StringBuilder sbFields = new StringBuilder(); keyIndex = 0; for (int index = 0; index < lstHeader.Count; index++) { sbFields.Append(string.Format("{0} {1},", lstHeader[index].Trim(), dataType)); strHeader += "" + lstHeader[index].Trim() + ","; if (lstHeader[index].Trim() == key) { keyIndex = index; } } string sql = string.Format(@"create table {0}( {1} )", tableName, sbFields.ToString().TrimEnd(',')); try { db.Execute(sql); lblTip.Content = "表头获取成功,表创建成功,共" + (maxPage + (1 - firstPageIndex)) + "页。"; } catch (Exception ex) { lblTip.Content = null == ex.InnerException ? ex.Message : ex.InnerException.Message; } btnBody.IsEnabled = true; btnHeader.IsEnabled = true; btnConn.IsEnabled = true; }