public void HandleUpload(string fileName, Stream stream)
        {
            var ms = new MemoryStream();

            stream.CopyTo(ms);
            ms.Seek(0, SeekOrigin.Begin);
            Console.WriteLine($"uploading {fileName}...");
            long l = 0;
            var  t = Path.GetFileNameWithoutExtension(fileName);

            Console.WriteLine($"writing data for category {t}...");
            var settings = new XmlReaderSettings()
            {
                CheckCharacters = true, CloseInput = true, ConformanceLevel = ConformanceLevel.Fragment
            };
            var reader = XmlReader.Create(ms, settings);

            //{
            while (!reader.EOF)
            {
                if (reader.Name != "row")
                {
                    reader.ReadToFollowing("row");
                }
                if (reader.EOF)
                {
                    continue;
                }
                var d = Encoding.UTF8.GetString(Encoding.Convert(Encoding.GetEncoding("ISO-8859-1"),
                                                                 Encoding.Default, Encoding.Default.GetBytes(reader.ReadOuterXml())));

                while (true)
                {
                    try
                    {
                        context.InsertItem(d, t);
                        l++;
                        break;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("{0} exception caught writing to db: {1}.  retrying...", DateTime.Now, ex.Message);
                    }
                }
            }
            reader.Dispose();
            //}
            //flush writes to disk
            context.Environment.SetEnvironmentTransactionCheckpoint(true, 0, 0);
            context.BeerDb.Sync();
            Console.WriteLine($"{l} records written from {fileName}.");
        }
Esempio n. 2
0
        /// <summary>
        /// Load all of our XML data files from the specified directory.
        /// </summary>
        /// <param name="path"></param>
        public void LoadBeerData()
        {
            do
            {
                Thread.Sleep(100);
            } while (!context.Initialized);


            if (context.GetLoadCount() > 0)
            {
                return;
            }

            try
            {
                var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "beer.stackexchange.com");

                context.ConfigureContainerIndex();

                foreach (var file in Directory.GetFiles(path))
                {
                    int id       = 0;
                    var t        = Path.GetFileNameWithoutExtension(file);
                    var fs       = new FileStream(file, FileMode.Open);
                    var settings = new XmlReaderSettings()
                    {
                        CheckCharacters = true, CloseInput = true, ConformanceLevel = ConformanceLevel.Fragment
                    };
                    using (var reader = XmlReader.Create(fs, settings))
                    {
                        while (!reader.EOF)
                        {
                            if (reader.Name != "row")
                            {
                                reader.ReadToFollowing("row");
                            }
                            if (reader.EOF)
                            {
                                continue;
                            }
                            var d = Encoding.UTF8.GetString(Encoding.Convert(Encoding.GetEncoding("ISO-8859-1"),
                                                                             Encoding.Default, Encoding.Default.GetBytes(reader.ReadOuterXml())));

                            while (true)
                            {
                                try
                                {
                                    context.InsertItem(d, t);
                                    id++;
                                    break;
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine("{0} exception caught writing to db: {1}.  retrying...", DateTime.Now, ex.Message);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine($"{ex.GetType()}:{ex.Message}\r\n{ex.StackTrace}");
                throw;
            }
        }