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