/// <summary> /// -1 从网页抓取数据失败,0 从网页抓取数据条数和数据库相同只更新时间 /// 返回抓取数据条数 /// </summary> /// <param name="strMsg">输出信息,用于显示</param> /// <param name="crawlTime">抓取时间</param> /// <returns></returns> public void Update4KInfo() { RealOrFake4KWebDataCaptureResult rst = new RealOrFake4KWebDataCaptureResult(); rst.crawlTime = DateTime.Now; string errMsg = ""; DataTable crawlDt = CrawlData(ref errMsg, this.crawlURL); if (crawlDt == null || crawlDt.Rows.Count == 0) { rst.strMsg = string.Format("从网页\n{0}\n抓取数据失败\n{1}", this.crawlURL, errMsg); rst.code = -1; this.threadWebDataCaptureCallback?.Invoke(rst); this.threadWebDataCaptureFinish?.Invoke(); return; } int diskCount = sqlData.CountRowsOfDiskFromFilmInfo( CommonString.RealOrFake4KDiskName); if ((diskCount - 1) >= crawlDt.Rows.Count) { // 更新时间 int affectedCount = sqlData.UpdateDiskRealOrFake4KInModifyTimeFromDiskInfo( rst.crawlTime); Debug.Assert(diskCount == affectedCount); rst.strMsg = string.Format( "从网页\n{0}\n抓取数据条数 {1} 小于或等于数据库已存在条数 {2}\n不更新数据库信息", this.crawlURL, crawlDt.Rows.Count, diskCount - 1); rst.code = 0; this.threadWebDataCaptureCallback?.Invoke(rst); this.threadWebDataCaptureFinish?.Invoke(); return; } sqlData.DeleteByDiskDescribeFromFilmInfo(CommonString.RealOrFake4KDiskName); int maxId = sqlData.GetMaxIdOfFilmInfo(); int startId = maxId + 1; int diskId = startId; DataTable dt = CommonDataTable.GetFilmInfoDataTable(); DataRow drDisk = dt.NewRow(); drDisk["id"] = startId++; drDisk["name"] = CommonString.RealOrFake4KDiskName; drDisk["path"] = "------"; drDisk["size"] = -1; drDisk["create_t"] = rst.crawlTime; drDisk["modify_t"] = rst.crawlTime; drDisk["is_folder"] = true; drDisk["to_watch"] = false; drDisk["to_watch_ex"] = false; drDisk["s_w_t"] = System.Data.SqlTypes.SqlDateTime.MinValue.Value; drDisk["to_delete"] = false; drDisk["to_delete_ex"] = false; drDisk["s_d_t"] = System.Data.SqlTypes.SqlDateTime.MinValue.Value; drDisk["content"] = String.Empty; drDisk["pid"] = -1; drDisk["max_cid"] = startId - 1 + crawlDt.Rows.Count; drDisk["disk_desc"] = CommonString.RealOrFake4KDiskName; dt.Rows.Add(drDisk); foreach (DataRow crawlDr in crawlDt.Rows) { DataRow dr = dt.NewRow(); dr["id"] = startId++; dr["name"] = string.Join(" | ", crawlDr.ItemArray.Cast <string>(). Where(x => !string.IsNullOrWhiteSpace(x))); dr["path"] = "------"; dr["size"] = -1; dr["create_t"] = rst.crawlTime; dr["modify_t"] = rst.crawlTime; dr["is_folder"] = false; dr["to_watch"] = false; dr["to_watch_ex"] = false; dr["s_w_t"] = System.Data.SqlTypes.SqlDateTime.MinValue.Value; dr["to_delete"] = false; dr["to_delete_ex"] = false; dr["s_d_t"] = System.Data.SqlTypes.SqlDateTime.MinValue.Value; dr["content"] = String.Empty; dr["pid"] = diskId; dr["max_cid"] = startId - 1; dr["disk_desc"] = CommonString.RealOrFake4KDiskName; dt.Rows.Add(dr); } sqlData.InsertDataToFilmInfo(dt); rst.strMsg = string.Format("从网页\n{0}\n抓取数据 {1} 条,已写入数据库", this.crawlURL, crawlDt.Rows.Count); rst.code = crawlDt.Rows.Count; this.threadWebDataCaptureCallback?.Invoke(rst); this.threadWebDataCaptureFinish?.Invoke(); }