//ставим метку удаленного public void NSetDeletedAddresses(int jobID, string dbConnectionString) { /* * update AddressesMask set Deleted=1 where Deleted is null and DateLastUpload<DATEADD(DAY,-5, CURRENT_TIMESTAMP) and JobID=N Где N - id'шник его джоба */ try { DataDBService ddbs = new DataDBService(); using(SqlConnection conn = ddbs.GetDBCon(dbConnectionString)) if (conn != null) { try { string sqlI = @" update AddressesMask set Deleted=1 where Deleted is null and DateLastUpload<DATEADD(DAY,-5, CURRENT_TIMESTAMP) and JobID=" + jobID; string sI = ddbs.ExecuteSQLCommand(sqlI, dbConnectionString); if (!string.IsNullOrEmpty(sI)) { ddbs.WriteErrorMessage(dbConnectionString, 0, null, "Ошибка метки deleted. " + "jobid = " + jobID + ". " + sI); } } finally { conn.Close(); } } } catch (Exception e) { DataDBService ddbs = new DataDBService(); ddbs.WriteErrorMessage(dbConnectionString, 0, null, "Ошибка в DataDBExtention.NSetStatistics." + e.ToString()); } }
protected bool IUDAdressesMask(string hostName, int jobID) { //из upload в адреса using(DataDBService ddbs = new DataDBService()) using(SqlConnection conn = ddbs.GetDBCon(_dbConnectionString)) try { if (conn != null) { //проставление deleted старым ссылкам с изменившимся хэшем (чтоб по 100 раз не перепарсивать) string SQLstrU0 = "update AddressesMask "+ "set Deleted = 1 "+ "where ID in "+ "( "+ " select id "+ " from AddressesMask a "+ " where a.Address>'' and Deleted is null and exists " + " ("+ " select * "+ " from AddressesMaskUpload u "+ " where u.Address = a.Address "+ " and u.Hash != a.Hash " + " AND u.Host ='" + hostName + "' AND u.StreamNumber =" + _streamNumber+ " ) " + ")"; string sU0 = ddbs.ExecuteSQLCommand(SQLstrU0, _dbConnectionString); if (!string.IsNullOrEmpty(sU0)) { ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка добавление ссылок в AddressesMask. " + "jobid = " + jobID + ". " + sU0); return false; } //insert того чего еще нет string SQLstrI = "INSERT INTO [AddressesMask] ([JobID],[Source_ref],[Address] ,[Sticker],[DateFirstUpload],[DateLastUpload],[Hash]) " + "SELECT up.[JobID],s.ID,up.[Address],up.[Sticker], up.[DateUpload], up.[DateUpload],up.[Hash] " + "FROM [AddressesMaskUpload] up " + "LEFT JOIN PjobStat pj on up.jobid = pj.ID " + "LEFT JOIN Sources s on s.Source = pj.Source " + "WHERE up.[Hash] NOT IN (SELECT a.[Hash] FROM AddressesMask a) " + "AND up.Host ='" + hostName + "' AND up.StreamNumber =" + _streamNumber; string sI = ddbs.ExecuteSQLCommand(SQLstrI, _dbConnectionString); if (!string.IsNullOrEmpty(sI)) { ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка добавление ссылок в AddressesMask. " + "jobid = " + jobID + ". " + sI); return false; } //update тех что уже есть //string SQLstrU = // "UPDATE [AddressesMask] " + // "SET DateLastUpload = up.DateUpload " + // "FROM [AddressesMaskUpload] up " + // "WHERE up.[Hash] = [AddressesMask].[Hash] " + // "AND up.Host ='" + hostName + "' AND up.StreamNumber =" + _streamNumber; string SQLstrU = "UPDATE [AddressesMask] " + "SET DateLastUpload = s.DateUpload " + "FROM (" + "select [Hash], DateUpload " + "from [AddressesMaskUpload] up " + "WHERE up.Host ='" + hostName + "' AND up.StreamNumber = " + _streamNumber + " except " + "select [Hash], DateLastUpload " + "from [AddressesMask] up " + ") s " + "where s.Hash=[AddressesMask].Hash"; string sU = ddbs.ExecuteSQLCommand(SQLstrU, _dbConnectionString); if (!string.IsNullOrEmpty(sU)) { ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка обновления времени ссылок в AddressesMask. " + "jobid = " + jobID + ". " + sU); return false; } if (string.IsNullOrEmpty(sI) && string.IsNullOrEmpty(sU)) { //delete этих строк string SQLstrD = "DELETE FROM [AddressesMaskUpload] " + "WHERE Host ='" + hostName + "' AND StreamNumber =" + _streamNumber; string sD = ddbs.ExecuteSQLCommand(SQLstrD, _dbConnectionString); if (!string.IsNullOrEmpty(sD)) { ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка удаления ссылок из AddressesMaskUpload. " + "jobid = " + jobID + ". " + sD); return false; } } conn.Close(); return true; } else { return false; } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { conn.Close(); conn.Dispose(); } return false; }
public void NSetStatistics(int jobID, string dbConnectionString, string hostName, int streamNumber) { try { DataDBService ddbs = new DataDBService(); using(SqlConnection conn = ddbs.GetDBCon(dbConnectionString)) if (conn != null) { try { string sqlI = @"INSERT INTO [ParsersStatistics] ([JobID],[SourceID],[SourceDescription],[DateBegin],[DateEnd],[Complete],[NumberOfRestart],[CountAnnouncement],[NewAnnouncement],[UpdatedAnnouncement],[Host],[Stream]) SELECT top 1 " + jobID + @",s.ID, pj.SourceDescription,pj.DateBegin, case when pj.DateEnd >= pj.DateBegin then pj.DateEnd else NULL end, pj.[Complete], pj.[NumberOfRestart], pj.[CountAds], (select COUNT(a.id) from AddressesMask a left join [PJobUpdate] p on a.JobID = p.ID where a.DateLastUpload between p.DateBegin and p.DateEnd + CONVERT(TIME,'00:00:05.000',104) and p.ID = " + jobID + @" and a.DateLastUpload=a.DateFirstUpload), (select COUNT(a.id) from AddressesMask a left join [PJobUpdate] p on a.JobID = p.ID where a.DateLastUpload between p.DateBegin and p.DateEnd + CONVERT(TIME,'00:00:05.000',104) and p.ID = " + jobID + @" and a.DateLastUpload>a.DateFirstUpload),'" + hostName + "'," + streamNumber + @" FROM [PJobView] pj INNER JOIN [Sources] s on s.[Source] = pj.[Source] WHERE pj.ID = " + jobID; string sI = ddbs.ExecuteSQLCommand(sqlI, dbConnectionString); if (!string.IsNullOrEmpty(sI)) { ddbs.WriteErrorMessage(dbConnectionString, 0, null, "Ошибка добавленя записи в статистику" + "jobid = " + jobID + ". " + sI); } } finally { conn.Close(); } } } catch (Exception e) { DataDBService ddbs = new DataDBService(); ddbs.WriteErrorMessage(dbConnectionString, 0, null, "Ошибка в DataDBExtention.NSetStatistics." + e.ToString()); } }
private bool NSetJobState(int id, int currentPage, int countPagesTotal, int CountAnnouncement, int jobid, HtmlDocument doc) { // текущие дата и время DateTime dateTime = DateTime.Now; //new DateTime(); string dt = dateTime.ToString("yyyy-MM-dd HH:mm:ss.fff"); using (DataDBService ddbs = new DataDBService()) { try { //update string SQLstr = "UPDATE [PJobUpdate] SET " + " StartType=1" + " ,LastDate='" + dt + "'" //+ " ,LastDocument= '" + doc.DocumentNode.InnerHtml.Replace("'", "''").Substring(0,999) + "'" + " ,CurrentPage=" + currentPage.ToString() + " ,CountPagesTotal=" + countPagesTotal.ToString() + " ,CountAnnouncement=CountAnnouncement+" + CountAnnouncement.ToString() + " ,Complete=" + (currentPage + 1 == _firstPage + _pageCount || currentPage == countPagesTotal ? 1 : 0).ToString() /* статус = 1 фиксируется в общем порядке + (currentPage + 1 == _firstPage + _pageCount || currentPage == countPagesTotal ? " ,ParserStatus=1" : "") */ + (currentPage + 1 == _firstPage + _pageCount || currentPage == countPagesTotal ? " ,DateEnd='" + dt + "'" : "") + " Where ID = " + id.ToString(); string s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString); //DataSet ds = ddbs.CreateCommandAndUpdate(SQLstr, _dbConnectionString); if (!string.IsNullOrEmpty(s)) ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка записи текущего состояния задания. " + jobid + "."); } finally { ddbs.Dispose();} } return (currentPage + 1 == _firstPage + _pageCount || currentPage == countPagesTotal ? false : true); }
public bool ToDB(string tableName, string connectionString) { if (this.items == null) return true; if (!this.items.Any()) return true; error = ""; DataDBService ddbs = new DataDBService(); bool fl = false; List <string> fields=null; List<int> PublishedIDs_ = new List<int>(); List<string> values = null; string[] values_field = null; string q = ""; try { ContainParsersDatafields(tableName, connectionString); fields = ContainFields(tableName, connectionString, fields); if (fields == null) return false; if (!fields.Any()) return false; for (int k = 0; k < this.items.Count() / 1000 + 1; k++) { int c = 0; if (this.items.Count() < 1000) c = this.items.Count(); else if (this.items.Count() - k * 1000 > 1000) c = 1000; q = "insert into " + tableName + "(" + String.Join(", ", fields.ToArray()) + ") values "; if (items == null || !this.items.Any()) return true; else c = this.items.Count() - k * 1000; values = new List<string>(); values_field = new string[fields.Count]; //DataTable table = CreateDBTable(); if (this.items != null) { for (int i = 0; i < c; i++) { if (this.items[i] != null) if (this.items[i].GetType() != null) try { for (int j = 0; j < fields.Count; j++) { if (this.items[i].GetPropertyValue(fields[j]) != null) { try { lock (fieldtypes) if (!fieldtypes.Keys.Contains(fields[j])) fieldtypes.Add(fields[j], this.items[i].GetPropertyValue(fields[j]).GetType().Name); } catch (Exception exxx) { ddbs.WriteErrorMessage(connectionString, 0, null, "Ошибка добавления полей в запрос " + exxx.Message); Console.WriteLine("Ошибка добавления полей в запрос " + exxx.Message); fl = false; error = exxx.Message; } if (fieldtypes[fields[j]] == "String") values_field[j] = ("'" + ((string)(this.items[i + k * 1000].GetPropertyValue(fields[j]))).Replace("'", "''") + "'"); else if (fieldtypes[fields[j]] == "Int32") values_field[j] = (((int)(this.items[i + k * 1000].GetPropertyValue(fields[j]))).ToString()); else values_field[j] = ("'" + ((this.items[i + k * 1000].GetPropertyValue(fields[j]))).ToString().Replace("'", "''") + "'"); } else values_field[j] = ("null"); } values.Add( ("(" + String.Join(", ", values_field) + ")")); try { if (this.items[i].GetPropertyValue("AddressParsing") != null) PublishedIDs_.Add((int)(this.items[i].GetPropertyValue("AddressParsing"))); } catch { Console.WriteLine("Ошибка");} } catch (Exception exxx) { string sss = exxx.Message; ddbs.WriteErrorMessage(connectionString, 0, null, "Ошибка добавления объявлений в запрос " + sss + ", i = " + i.ToString()); Console.WriteLine("Ошибка добавления объявлений в запрос " + sss + ", i = " + i.ToString()); error = sss + " " + q; fl = false; } } } if(values!=null) if (values.Any()) { q += String.Join(", ", values); string s2 = ddbs.ExecuteSQLCommand(q, connectionString, 29); if (this.items != null) Console.WriteLine("Отправили " + this.items.Count() + " объектов"); if (PublishedIDs_!=null) if (PublishedIDs_.Any()) { if (!string.IsNullOrEmpty(s2)) { ddbs.WriteErrorMessage(connectionString, 0, null, "Ошибка записи объектов в БД " + s2 + " " + q); Console.WriteLine("Ошибка записи объектов в БД " + s2 + " " + q.Substring(0, 99)); error = s2 + " " + q; fl = false; } else { PublishedIDs.AddRange(PublishedIDs_); fl = true; } } else fl = false; } else fl = true; } //return true; } catch (Exception exx) { if (this.items != null) Console.WriteLine("Не отправили " + this.items.Count() + " объектов"); string s = exx.Message; ddbs.WriteErrorMessage(connectionString, 0, null, "Ошибка отправки объявлений2: " + exx.Message); Console.WriteLine("Ошибка отправки объявлений2: " + exx.Message); fl = false; error = s + " " + q; } finally { if (fields != null) { fields.Clear(); GC.SuppressFinalize(fields); } if (values != null)GC.SuppressFinalize(values); if (values_field != null)GC.SuppressFinalize(values_field); } if (!fl) return fl; return fl; }
public void JobToNoBusy() { // при остановке сервиса // остающиеся в состоянии занято // имя хоста string hostName = Dns.GetHostName(); //string ipAddress = ""; // IP хоста IPHostEntry ipEntry = Dns.GetHostEntry(hostName); string SQLstr = "UPDATE PJobUpdate SET " + " StartType=6" + " ,Busy=0, Start=1, FirstPage = currentpage " // -- + " Where " + " Host = '" + hostName + "'" //+ " and IP = '" + ipAddress + "'" + " and Busy=1"; using (DataDBService ddbs = new DataDBService()) { string s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString); if (!string.IsNullOrEmpty(s)) { ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, "JobToNoBusy. не смог выставить Start=1, Busy =0, работавшим задачам при остановке сервиса"); ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка записи изменения состояния задания по зависанию в занято при остановке сервиса. " + _parserName + " " + _sourceDescription + ". " + s); } } }
public void JobSchedule() { // StartUp - не смотрим // Начальная страница обычного задания - из поля FirstPageForSchedule // Даты старта - из DateStart, если совпадает с текущей датой - текущая дата, иначе 01.01.1900 (скалярная ф-я sfGetJobDate) // Времена старта - истина, если текущее время больше не более, чем на minutes минут времени старта, ложь (скалярная ф-я sfGetJobTime) // Время в часах с момента DateEnd+TimeEnd - в часах (скалярная ф-я sfGetHoursFromEnd) if (GetTuningScheduler()) // данному парсеру разрешена работа планировщиком? { //StreamWriter _fileWrite; //добавлено 24.11.2014 using (DataDBService ddbs = new DataDBService()) { ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, " Schedule. п1. начинаю..."); // ежедневное //берем id, которые не запущены и не выствлен старт соответствуют (кроме авито,) string SQLstr = "UPDATE PJobUpdate SET " + " StartType=2" + " ,Start=1" + " ,NumberOfRestart = 0" + " ,FirstPage=isnull((select pv.FirstPageForSchedule from PJobStat pv where PJobUpdate.ID=pv.ID),1)" + " ,PageCount=isnull((select pv.PageCountForSchedule from PJobStat pv where PJobUpdate.ID=pv.ID),999)" // -- + " WHERE ID in " + @" ( SELECT DISTINCT ID FROM PJobView jv OUTER APPLY (select word from dbo.split (TimeStart, '%,%') )spl WHERE StartUp=1 and ( --сегоднящние ( --запланированное время старта меньше текущего времени. substring(spl.word, patindex('%[^\.]%', spl.word),40)< SUBSTRING(CONVERT(nvarchar(32),CONVERT (time, CURRENT_TIMESTAMP)),0,CHARINDEX('.',CONVERT(nvarchar(32),CONVERT (time, CURRENT_TIMESTAMP)),0)-3) --дата начала парсинга меньше текущей даты +запланированное время старта (то есть сегодня не стартовала в нужное время) and (CONVERT(datetime,DateBegin,104) < convert(datetime,CONVERT (date, CURRENT_TIMESTAMP)) +' '+CONVERT(time,substring(spl.word, patindex('%[^\.]%', spl.word),40)+':00',108) --для задач, которые стартуют более одного раза, чтобы выводились остаточные разы or CONVERT(datetime,DateEnd,104) < convert(datetime,CONVERT (date, CURRENT_TIMESTAMP)) +' '+CONVERT(time,substring(spl.word, patindex('%[^\.]%', spl.word),40)+':00',108)) ) or --для вчерашних ( --дата начала парсинга меньше текущей даты +запланированное время старта (то есть сегодня не стартовала в нужное время) CONVERT(datetime,DateBegin,104) < convert(datetime,cast (DATEADD(DAY,-1, CURRENT_TIMESTAMP) as date)) +' '+CONVERT(time,substring(spl.word, patindex('%[^\.]%', spl.word),40)+':00',108) --для задач, которые стартуют более одного раза, чтобы выводились остаточные разы or CONVERT(datetime,DateEnd,104)< convert(datetime,cast (DATEADD(DAY,-1, CURRENT_TIMESTAMP) as date)) +' '+CONVERT(time,substring(spl.word, patindex('%[^\.]%', spl.word),40)+':00',108) ) ) --and ParserName not like 'avito%' and isnull(Busy,0)=0 and isnull(Start,0)=0 ) "; string s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString); //DataSet ds = ddbs.CreateCommandAndUpdate(SQLstr, _dbConnectionString); if (!string.IsNullOrEmpty(s)) { ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, "Schedule. п1. не смог выставить Start задачам " + s); ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Schedule. п1. не смог выставить Start задачам" + _parserName + " " + _sourceDescription + ". " + s); } s = ""; ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, " Schedule. п2. начинаю..."); //старт раз в 12 часов для тех, где превышено количество рестартов SQLstr = "UPDATE PJobUpdate SET " + " StartType=3" + " ,Start=1" + " ,NumberOfRestart = 0" + " ,FirstPage=isnull((select pv.FirstPageForSchedule from PJobStat pv where PJobUpdate.ID=pv.ID),1)" + " ,PageCount=isnull((select pv.PageCountForSchedule from PJobStat pv where PJobUpdate.ID=pv.ID),999)" // --разница между текущим временем и последней отпиской в базу больше 12 часов + @" Where ID in ( SELECT ID FROM PJobView where StartUp=1 and NumberOfRestart > AllowRestarts --and ParserName not like 'avito%' and DATEDIFF(HOUR, CONVERT(datetime,LastDate,104), CURRENT_TIMESTAMP) > 12 )"; s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString); if (!string.IsNullOrEmpty(s)) { ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, " Schedule. п2. не смог выставить Start задачам " + s); ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, " Schedule. п2. не смог выставить Start задачам, где NumberOfRestart>AllowRestarts и LastTime>12h" + _parserName + " " + _sourceDescription + ". " + s); } s = ""; ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, " Schedule. п3. начинаю..."); //24/11/2014 не совсем понимаю эту ситуацию, видо для тех, кто остался висеть после рестарта сервиса, но сейчас в JobToNoBusy() добавлено выставелние Start=1, скорее всего эта ситуация не повторится // незавершенные / незанятые / не в старте (подхватываются в т.ч. после рестарта сервиса) SQLstr = "UPDATE PJobUpdate SET " + " StartType=4" + " ,Start=1" // -- + " ,FirstPage=isnull((select pv.FirstPageForSchedule from PJobStat pv where PJobUpdate.ID=pv.ID),1)" + " ,PageCount=isnull((select pv.PageCountForSchedule from PJobStat pv where PJobUpdate.ID=pv.ID),999)" // -- + " Where isnull(Complete,0)=0" //+ " and isnull(Startup,0)=1" //здесь этого не надо + " and isnull(Start,0)=0" + " and isnull(Busy,0)=0" + " and isnull(CurrentPage,0)+1 < isnull(FirstPage,1)+isnull(PageCount,1)" // страниц меньше + " and isnull(NumberOfRestart,0) > 0" // старты были + " "; s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString); if (!string.IsNullOrEmpty(s)) { ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, "Schedule. п3. не смог выставить Start задачам " + s); ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Schedule. п3. Ошибка записи изменения состояния задания по незавершено незанято." + _parserName + " " + _sourceDescription + ". " + s); } s = ""; ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, " Schedule. п4. начинаю..."); // зависшие в состоянии занято //change - 24/11/2014 SQLstr = "UPDATE PJobUpdate SET " + " StartType=5" + " ,Busy=0, FirstPage = case when CurrentPage > 1 then CurrentPage-1 else 1 end, Start=1 " // -- + @" Where ID in ( SELECT ID FROM PJobView where DATEDIFF(MINUTE, CONVERT(datetime,LastDate,104),CURRENT_TIMESTAMP) > ResetTimeInMinutes and isnull(Startup,0)=1 and isnull(Busy,0)=1 ) "; s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString); if (!string.IsNullOrEmpty(s)) { ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, "Schedule. п4. не смог выставить Start задачам. " + s); ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Schedule. п4. не смог выставить Start зависшим задачам (Busy=1)" + _parserName + " " + _sourceDescription + ". " + s); } } } }
private void SetJobStatus(int id, int status) { using (DataDBService ddbs = new DataDBService()) { //update string SQLstr = "UPDATE [PJobUpdate] SET " + " StartType=1" + " ,ParserStatus=" + status.ToString() + " Where ID = " + id.ToString(); string s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString); if (!string.IsNullOrEmpty(s)) { ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, "Ошибка записи текущего состояния задания."); ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка записи текущего состояния задания. " + _parserName + " " + _sourceDescription + ". " + s + (status != 1 ? "Ошибка: статус " + status.ToString() + "." : "")); } if (status != 1) ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, _startPage, "Ошибка: статус " + status.ToString() + ". jobID=" + _ID); } //DataSet ds = ddbs.CreateCommandAndUpdate(SQLstr, _dbConnectionString); }
private bool SetJobToStartOrStop(bool start) { // имя хоста string hostName = Dns.GetHostName(); string ipAddress = ""; // IP хоста IPHostEntry ipEntry = Dns.GetHostEntry(hostName); IPAddress[] addr = ipEntry.AddressList; for (int i = 0; i < addr.Length; i++) { ipAddress = ipAddress + addr[i].ToString() + ";"; } ipAddress = ipAddress.Substring(0, ipAddress.Length - 1); // текущие дата и время DateTime dateTime = DateTime.Now; //new DateTime(); //string date = dateTime.Date.ToString("dd.MM.yyyy"); //string time = dateTime.ToString("HH:mm:ss"); string dt = dateTime.ToString("yyyy-MM-dd HH:mm:ss.fff"); using (DataDBService ddbs = new DataDBService()) { if (_numberOfRestart <= _allowRestarts) { //версия на 26.11 для того чтобы при рестарте задачи мы не зануляли количество спарсенных ссылок //и не перезаписывали дату начала парсинга задачи - позволит не потерять новые и обновленные ссылки string SQLstr = "UPDATE PJobUpdate SET " + " StartType=1" + " ,Busy=" + (start ? 1 : 0).ToString() + (!start ? ",Host = ''" : " ,Host = '" + hostName + "'") + (!start ? ",IP = ''" : " ,IP = '" + ipAddress + "'") + (!start ? " ,ServiceMessage= 'отработал +" + _parserName + " " + _streamNumber.ToString() + " " + dt + "'" : " ,ServiceMessage= 'стартовал +" + _parserName + " " + _streamNumber.ToString() + " " + dt + "'") + (start ? " ,Start=0" : "") + (start ? " ,NumberOfRestart=isnull(NumberOfRestart,0)+1" : "") + (start ? " ,LastDocument=''" : "") + (start ? (_numberOfRestart > 0 ? "" : " ,CurrentPage=0") : "") + (start ? " ,CountPagesTotal=0" : "") //+ (start ? (_numberOfRestart > 0 ? "" : " ,CountAnnouncement=0") : "") + (start ? (_numberOfRestart > 0 ? (_firstPage == 1 ? " ,CountAnnouncement=0" : "") : " ,CountAnnouncement=0") : "") + (start ? " ,Complete=0" : "") + (start ? " ,ParserStatus=0" : "") + (start ? (_numberOfRestart > 0 ? "" : " ,DateBegin='" + dt + "'") : "") + (start ? " ,LastDate='" + dt + "'" : "") + " Where ID = " + _ID.ToString(); string s2 = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString); //DataSet ds = ddbs.CreateCommandAndUpdate(SQLstr, _dbConnectionString); if (!string.IsNullOrEmpty(s2)) ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка старта/остановки парсинга из-за ошибки записи задания. " + _parserName + " " + _sourceDescription + ". " + s2); if (_numberOfRestart + 1 > _allowRestarts) { if (!start) { //если превышено количество рестартов. пишем в статистику DataDBExtention ddbe = new DataDBExtention(); ddbe.NSetStatistics(_ID, _dbConnectionString, hostName, _streamNumber); ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка старта/остановки парсинга из-за превышения заданного количества рестартов " + _parserName + " " + _sourceDescription + "."); } return false; } return (string.IsNullOrEmpty(s2) ? true : false); } else // такое не случится, если не будет нарушена логика обработки { ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка старта/остановки парсинга из-за превышения заданного количества рестартов " + _parserName + " " + _sourceDescription + "."); return false; } } }
public static bool CleanPJobUpdate(string _dbConnectionString) { string hostName = Dns.GetHostName(); string SQLstr = "UPDATE PJobUpdate SET Busy=0 where host='"+ hostName + "' and busy=1"; using (DataDBService ddbs = new DataDBService()) { string s2 = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString); if (String.IsNullOrEmpty(s2)) return true; } return false; }