static void SyncDataOne(string url, string table, int page)
{
Console.WriteLine();
//下載檔案
byte[] b = new System.Net.WebClient().DownloadData(url);
//json介面回傳
string json = System.Text.Encoding.UTF8.GetString(b);
//計算hash
string md5 = utilty.Md5(json);
//獲取資料集
System.Data.DataTable dataTable = utilty.JsonToDataTable(url, json, new string[] { "data", "result" });
//string md5 = dataTable.Rows.Count.ToString();
Console.Write("檔案{0}已下載,包含資料{1}行。",url,dataTable.Rows.Count);
if (dataTable.Rows.Count == 0)
{
Console.Write("任務結束!");
return;
}
if (dataTable.Rows.Count < 1000)
{
Console.Write("正在檢查資料量...");
using (var conn = new SqlConnection())
{
conn.ConnectionString = ConfigurationManager.AppSettings["conn"];
conn.Open();
//檢查資料庫md5
using (SqlCommand command = conn.CreateCommand())
{
command.CommandText = "select md5 from tb_download where url = @url and status=1";
//by于
//Console.Write(command.CommandText);
command.Parameters.AddWithValue("url", url);
object obj = command.ExecuteScalar();
//如果存在且md5相同則跳過處理。
if (obj != null && obj.ToString() == md5)
{
Console.Write("無更新資料。");
return;
}
//更新插入
command.CommandText = @"delete from tb_download where url = @url;
insert into tb_download(id,url,data,md5,rowtime,status)
values(newid(),@url,@data,@md5,getdate(),0)";
command.Parameters.AddWithValue("md5", md5);
command.Parameters.AddWithValue("data", json);
command.ExecuteNonQuery();
//洗掉更新資料
command.CommandText = string.Format("delete from {0} where url=@url", table);
command.ExecuteNonQuery();
//有變化的根據url更新目標表
using (System.Data.SqlClient.SqlBulkCopy bcp = new SqlBulkCopy(conn))
{
foreach (System.Data.DataColumn c in dataTable.Columns)
{
bcp.ColumnMappings.Add(c.ColumnName, c.ColumnName);
}
bcp.DestinationTableName = table;
try
{
bcp.WriteToServer(dataTable);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
//更新任務狀態
command.CommandText = "update tb_download set status=1 where url = @url";
command.ExecuteNonQuery();
}
//by 20200529
if (dataTable.Rows.Count == 1000)
{
Console.WriteLine("第二頁");
page = 2;
if (page == 2)
{
url = url + "&page=" + page;
SyncDataOne(url, table, 2);
}
}
if (page == 2)
{
Console.Write("第二頁任務結束!");
return;
}
//by end
//更新任務狀態
//command.CommandText = "exec sync_done";
//command.ExecuteNonQuery();
}
Console.Write("記錄已更新。");
}
改了標紅的代碼 就報錯了.. 條數等于1000時不執行..
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/34578.html
標籤:C#
