/// <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(); } }