public void ToDB() { lock (ap) { DataDBSerializer s = new DataDBSerializer(ap.ToArray(), true); if (!s.ToDB("ParsersData", ddbs.ConnectionString)) { ddbs.WriteErrorMessage(ddbs.ConnectionString, 0, null, "Ошибка отправки объявлений"); } else { ap.RemoveAll(item => true); ap.Clear(); } } }
public bool ToDB(string ConnectionString, bool sendanyway = false) { bool fl = false; lock(todblockobject) { DirtyApartments[] temp = null; //if(ap!=null) try { bool fla = false; lock (ap) { fla = (ap.Count > 20) || (sendanyway && (ap.Count > 0)); } while (fla) { lock (ap) { Console.WriteLine("Надо отправить еще " + ap.Count + " объявлений"); } int c = 0; lock (ap) { c = ap.Count; } if (c > 150) c = 150; temp = new DirtyApartments[c]; lock (ap) { for (int i = 0; i < c; i++) temp[i] = ap[i]; } Console.WriteLine("Начинаем отправку пачки из " + temp.Count() + " объявлений"); if (temp != null) using (DataDBSerializer s = new DataDBSerializer(temp, true)) { bool f = s.ToDB("ParsersData", ConnectionString); while (!f) { //ddbs.WriteErrorMessage(ddbs.ConnectionString, 0, null, "Ошибка отправки объявлений " + s.error); Console.WriteLine("Ну вот, объявления не отправились"); f = s.ToDB("ParsersData", ConnectionString); } if (s.error != "" && f) { Console.WriteLine("При отправке была ошибка, а все равно вернулось, что все объявления отправлены"); //ddbs.WriteErrorMessage(ddbs.ConnectionString, 0, null, "При отправке была ошибка, а все равно вернулось, что все объявления отправлены " + s.error); f = false; } if (f) { { lock (ap) { ap.RemoveAll(item => s.Contains(item)); if (ap.Count == 0) ap.Clear(); } } lock (ap) { fla = (ap.Count > 20) || (sendanyway && (ap.Count > 0)); } } GC.SuppressFinalize(temp); } } if (!fla) fl = true; } catch (Exception e) { string se = e.Message; Console.WriteLine("Ошибка в модуле отправки объектов на 9 " + se); fl = false; } finally { if (temp != null) GC.SuppressFinalize(temp); } } return fl; }
public bool InsertIntoAddressesUpload(List<string> addresses, List<string> stickers, int jobID, string hostName) { if (addresses.Count == 0) return true; DateTime now = DateTime.Now; DataDBService ddbs = new DataDBService(); using(SqlConnection conn = ddbs.GetDBCon(_dbConnectionString)) try { if (conn != null && addresses.Count > 0) { DataTable table = new DataTable(); table.Columns.Add("JobID", typeof(int)); table.Columns.Add("Address", typeof(string)); table.Columns.Add("Sticker", typeof(string)); table.Columns.Add("DateUpload", typeof(System.Data.SqlTypes.SqlDateTime)); table.Columns.Add("Host", typeof(string)); table.Columns.Add("StreamNumber", typeof(int)); //если пусто количество ссылок, берем количество стикеров - верно для досок int count = (addresses.Count > 0) ? addresses.Count : stickers.Count; for (int k = 0; k < count; k++) { DataRow newRow = table.NewRow(); newRow["JobID"] = jobID; newRow["Address"] = addresses[k]; newRow["Sticker"] = stickers[k]; newRow["DateUpload"] = now; newRow["Host"] = hostName; newRow["StreamNumber"] = _streamNumber; table.Rows.Add(newRow); } SqlBulkCopy sqlBulk = new SqlBulkCopy(_dbConnectionString, SqlBulkCopyOptions.FireTriggers); sqlBulk.DestinationTableName = "AddressesMaskUpload"; DataDBSerializer ddbser = new DataDBSerializer(); List<string> DBNames = ddbser.GetDBTableFields(sqlBulk.DestinationTableName, _dbConnectionString); foreach (DataColumn column in table.Columns) { string columnName = column.ColumnName; //for (int t = 0; t < DBNames.Count(); t++) { //if (columnName.Trim().ToUpper() == DBNames[t].Trim().ToUpper()) //if (DBNames[t].Trim().ToUpper() != "ID") sqlBulk.ColumnMappings.Add(columnName.Trim(), columnName.Trim()); } } try { // пишем все на сервер sqlBulk.WriteToServer(table); sqlBulk.Close(); return true; } catch (Exception ex) { ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка записи в AddressesMaskUpload. " + "jobId " + jobID + ". " + ex); return false; } finally { GC.SuppressFinalize(sqlBulk); } } else { //если подключение вернуло null return false; } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { conn.Close(); conn.Dispose(); } return false; }
private void SendAll() { Dictionary<int, int> statuses = new Dictionary<int, int>(); foreach (DataDBURLJob d in made) statuses.Add(d._addressparsing, d.status); jobs.jobs.Clear(); made.Clear(); if(statuses.Any()) while (!DataDBURLJobs.SetJobStatuses(statuses, ddbs)) Thread.Sleep(100); if (das.Any()) { DataDBSerializer s = new DataDBSerializer(das.ToArray(), true); while (!s.ToDB("ParsersData", ddbs.ConnectionString)) { ddbs.WriteErrorMessage(ddbs.ConnectionString, 0, null, "Ошибка отправки объявлений"); } } while (jobs.Count() == 0) jobs.AddJobs(ddbs, 14); }
public void ToDB() { lock (lock_) { DataDBSerializer s = new DataDBSerializer(ap.ToArray(), true); if (s.ToDB("ParsersData", ddbs.ConnectionString)) ap.RemoveAll(item => true); } }