.cs
按钮事件:
string sbHtmltext = WBdata.DocumentText;//获取所有页面元素
GetColomnNumAndName(sbHtmltext);//获取栏目
GetValue(sbHtmltext);//获取数据
try
{
if (dt != null && dt.Rows.Count > 0)//判断数据源是否为空
{
string descTableName = "result_南京_" + txttablename.Text.Trim();
string str = bll.SourceExcel_Import_Web(descTableName, dt);
dt.Reset();//重置数据容器DataTable
MessageBox.Show(str);
HtmlDocument document = this.WBdata.Document;//自动下拉网页到底部
document.Window.ScrollTo(750, 1000);
}
else
{
MessageBox.Show("未采集到数据!");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
/// <summary>
/// 获取列名
/// </summary>
/// <param name="sbHtmltext"></param>
public void GetColomnNumAndName(string sbHtmltext)
{
int i = 0;
for (i = 0; ; i++)
{
string ColomnName = "";
string StartColoumnName = @"<th scope=""col"">";
string EndColoumnName = "</th>";
int StartColoumnNameIndex = sbHtmltext.IndexOf(StartColoumnName);
if (StartColoumnNameIndex >-1)//判断元素中是否存在数据
{
int EndColoumnNameIndex = sbHtmltext.IndexOf(EndColoumnName);
int longs = EndColoumnNameIndex - StartColoumnNameIndex - StartColoumnName.Length;
ColomnName = sbHtmltext.Substring(StartColoumnNameIndex + StartColoumnName.Length, longs);
dt.Columns.Add(ColomnName.ToString().Trim());//将表格栏目添入DataTable的Columns中
sbHtmltext = sbHtmltext.Remove(0, (EndColoumnNameIndex + EndColoumnName.Length));
}
else
{
break;
}
}
}
/// <summary>
/// 获取数据
/// </summary>
/// <param name="sbHtmltext"></param>
public void GetValue(string sbHtmltext)
{
string StartColoumnName = @"<table cellspacing=""0"" rules=""all"" border=""1"" id=""ctl00_ContentPlaceHolder1_gvChanpin"" style=""border-collapse:collapse;"">";
string EndColoumnName = @"<td colspan=""14""><table border=""0"">";
string StartValue = "<td>";
string EndValue = "</td>";
int StartColoumnNameIndex = sbHtmltext.IndexOf(StartColoumnName);
int EndColoumnNameIndex = sbHtmltext.IndexOf(EndColoumnName);
int longs = EndColoumnNameIndex - StartColoumnNameIndex - StartColoumnName.Length;
string sbHtmltextChild = sbHtmltext.Substring(StartColoumnNameIndex + StartColoumnName.Length, longs);//剔除不包含数据的上下元素
for (int i = 0; ; i++)
{
string Value = "";
int StartChild = sbHtmltextChild.IndexOf(StartValue);
if (StartChild > -1)//判断元素中是否存在数据
{
DataRow dr = dt.NewRow();//新建一行
for (int j = 0; ; j++)
{
int StartValueIndex = sbHtmltextChild.IndexOf(StartValue);
if (StartValueIndex > -1 && StartValueIndex != 18)//判断元素中是否存在数据
{
int EndValueIndex = sbHtmltextChild.IndexOf(EndValue);
int longsChild = EndValueIndex - StartValueIndex - StartValue.Length;
Value = sbHtmltextChild.Substring(StartValueIndex + StartValue.Length, longsChild).Replace("\r\n", "").Replace("\t", "").Replace("\"", """).Trim();
dr[j] = Value.ToString().Trim();//将数据添入新建的一行中
sbHtmltextChild = sbHtmltextChild.Remove(0, (EndValueIndex + EndValue.Length));//剔除已经含有录入完数据的元素
}
else
{
break;
}
}
dt.Rows.Add(dr);
int removelen = sbHtmltextChild.IndexOf(StartValue);
if (removelen > -1)//判断所剩元素中是否还有数据
{
sbHtmltextChild = sbHtmltextChild.Remove(0, removelen);//剔除所剩元素中头部无效元素
}
}
else
{
break;
}
}
}
.DAL
/// <summary>
/// 导入数据
/// </summary>
/// <param name="descTableName"></param>
/// <param name="dtSource"></param>
/// <returns></returns>
public string SourceExcel_Import_Web(string descTableName, DataTable dtSource)
{
string succ = "";
try
{
string column = "";
for (int i = 0; i < dtSource.Columns.Count; i++)
{
if (i == 0)
{
column += dtSource.Columns[i].ColumnName + " varchar(max)";
}
else
{
column += "," + dtSource.Columns[i].ColumnName + " varchar(max)";
}
}
string strsql = "if not exists(select * from sysobjects where name='" + descTableName + "') begin create table " + descTableName + "(" + column + ") end";
HZ.Data.DbHelperFactory.Create(connectWeb).ExecuteNonQuery(strsql);
SqlBulkCopyOptions sqlBulkCopyOptions;
sqlBulkCopyOptions = SqlBulkCopyOptions.FireTriggers;
SqlBulkCopy DTS = new System.Data.SqlClient.SqlBulkCopy(connectWeb, sqlBulkCopyOptions);
DTS.NotifyAfter = 1;
DTS.DestinationTableName = descTableName;
DTS.BulkCopyTimeout = 60000000;
DTS.WriteToServer(dtSource);
succ = "导入成功!" + dtSource.Rows.Count + "条数据";
}
catch (Exception ex)
{
succ = ex.Message;
}
return succ;
}