Example #1
0
        /// <summary>
        /// Выполнение процедуры экспорта данных
        /// </summary>
        private void StartExport()
        {
            SqlConnection cnt = Site.GetDatabaseConnection();

            if (cnt != null && cnt.State == System.Data.ConnectionState.Open)
            {
                dsParserTableAdapters.tInventItemsTableAdapter taItems = new dsParserTableAdapters.tInventItemsTableAdapter();
                int itemsCount;
                try { itemsCount = (int)taItems.ItemsCount(); }
                catch { itemsCount = 0; }

                // Работаем с товарами через SqlDataReader, поскольку в выборке очень много записей
                string        query     = @"SELECT * FROM [dbo].[tInventItems]";
                SqlCommand    cndInvent = new SqlCommand(query, cnt);
                SqlDataReader rdrInvent = cndInvent.ExecuteReader();

                if (rdrInvent.HasRows)
                {
                    FileRow exportRow;
                    int     exportedItems = 0;
                    string  logMessage    = @"{0} {1} из {2}";
                    string  logCaption;

                    while (rdrInvent.Read() && IsActive && (!ExportFragments || exportedItems < PreviousFragment + FragmentSize))
                    {
                        List <ImageResource> imgList = GetImagesList((int)rdrInvent["Id"]);

                        exportRow             = new FileRow();
                        exportRow.XmlId       = (int)rdrInvent["Id"];
                        exportRow.Name        = rdrInvent["Name"].ToString().Replace(";", " ").Replace("\n", " ").Replace("\r", " ").Replace(@"""", " ");
                        exportRow.PreviewText = rdrInvent["ShortDescr"].ToString().Replace(";", " ").Replace("\n", " ").Replace("\r", " ").Replace(@"""", " ");
                        exportRow.DetailText  = rdrInvent["Descr"].ToString().Replace(";", " ").Replace("\n", " ").Replace("\r", " ").Replace(@"""", " ");
                        exportRow.ArtNumber   = @"SMR-" + rdrInvent["Id"].ToString().Trim();
                        exportRow.Price       = (decimal)rdrInvent["Price"];

                        FillOptions(ref exportRow);

                        FillGroups(ref exportRow, (int)rdrInvent["ParentId"]);

                        if (!ExportFragments || exportedItems >= PreviousFragment)
                        {
                            // Выгрузка с учётом изображений
                            if (imgList.Count > 0)
                            {
                                foreach (ImageResource img in imgList)
                                {
                                    if (img.LocalImageFile != null && img.LocalImageFile.Exists)
                                    {
                                        //string remoteFileName = @"invent_export/" + img.LocalImageFile.Name;
                                        string remoteFileName = img.LocalImageFile.Name;
                                        exportRow.MorePhoto = remoteFileName;
                                        ExportFile.FileWriter.WriteLine(exportRow.ToString());
                                    }
                                }
                            }
                            else
                            {
                                ExportFile.FileWriter.WriteLine(exportRow.ToString());
                            }

                            logCaption = @"Экспортировано";
                        }
                        else
                        {
                            logCaption = @"Пропущено";
                        }

                        // Формирование сообщения пользователю
                        exportedItems++;
                        if (exportedItems % 100 == 0)
                        {
                            Log = string.Format(logMessage, logCaption, exportedItems, itemsCount);
                        }
                    }

                    // Фиксируем значение границы выгрузки
                    PreviousFragment = exportedItems >= itemsCount ? 0 : exportedItems;
                }

                rdrInvent.Close();
                cnt.Close();
            }
        }