예제 #1
0
 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();
         }
     }
 }
예제 #2
0
        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;
        }
예제 #3
0
        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;
        }
예제 #4
0
 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);
 }
예제 #5
0
            public void ToDB()
            {
                lock (lock_)
                {
                    DataDBSerializer s = new DataDBSerializer(ap.ToArray(), true);
                    if (s.ToDB("ParsersData", ddbs.ConnectionString))
                        ap.RemoveAll(item => true);

                }
            }