public void DataReaderToCsvTest_SanitizeColumnHeaders() { var dt = new DataTable(); dt.Columns.Add(new DataColumn("COL_STRING", typeof(string))); dt.Rows.Add("test"); var options = new SaveQueryToCSVOptions { SanitizeColumnHeaders = true }; using (var writer = new StringWriter()) using (var csvFile = QueryToFileTask.CreateCsvWriter(options.GetFieldDelimeterAsString(), writer)) using (var reader = new DataTableReader(dt)) { QueryToFileTask.DataReaderToCsv(reader, csvFile, options, new System.Threading.CancellationToken()); csvFile.Flush(); var result = writer.ToString(); var resultLines = result.Split("\r\n", StringSplitOptions.None); // 3 lines = 1 header lines + 1 data lines + 1 newline at end of file Assert.AreEqual(3, resultLines.Length); Assert.AreEqual("col_string", resultLines[0]); } }
public void DataReaderToCsvTest_1mRows() { var rowAmount = 1000000; var processingMaxTimeSeconds = 2d; var dt = new DataTable(); dt.Columns.AddRange(new[] { new DataColumn("col_string", typeof(string)), new DataColumn("col_datetime", typeof(DateTime)), new DataColumn("col_float", typeof(float)), new DataColumn("col_double", typeof(double)), new DataColumn("col_decimal", typeof(decimal)), }); for (var i = 0; i < rowAmount; i++) { dt.Rows.Add($"Hello, mister {i}", DateTime.Now, i, i, i); } var options = new SaveQueryToCSVOptions { DateFormat = "MM-dd-yyyy HH:mm:ss", ColumnsToInclude = new[] { "col_string", "col_float" }, FieldDelimiter = CsvFieldDelimiter.Pipe }; using (var writer = new StringWriter()) using (var csvFile = QueryToFileTask.CreateCsvWriter(options.GetFieldDelimeterAsString(), writer)) using (var reader = new DataTableReader(dt)) { var sw = Stopwatch.StartNew(); QueryToFileTask.DataReaderToCsv(reader, csvFile, options, new System.Threading.CancellationToken()); csvFile.Flush(); sw.Stop(); Console.WriteLine("Elapsed={0}", sw.Elapsed); var result = writer.ToString(); var resultLines = result.Split("\r\n", StringSplitOptions.None); // rowAmout + 1 header row + 1 newline at end Assert.AreEqual(rowAmount + 2, resultLines.Length); // Check execution time Assert.IsTrue( sw.Elapsed.TotalSeconds < processingMaxTimeSeconds, $"DataReaderToCsv completed in {sw.Elapsed.TotalSeconds} seconds. Processing max time: {processingMaxTimeSeconds} seconds"); } }
public void DataReaderToCsvTest_AllColumns() { var dt = new DataTable(); dt.Columns.AddRange(new[] { new DataColumn("col_string", typeof(string)), new DataColumn("col_datetime", typeof(DateTime)), new DataColumn("col_float", typeof(float)) }); dt.Rows.Add("Hello\"semicolon1", DateTime.Parse("2018-12-31T11:22:33"), 3000.212); dt.Rows.Add("Hello\"semicolon2", DateTime.Parse("2018-12-31T11:22:34"), 3000.212); var options = new SaveQueryToCSVOptions { DateFormat = "MM-dd-yyyy", DateTimeFormat = "MM-dd-yyyy HH:mm:ss", ColumnsToInclude = new string[0], FieldDelimiter = CsvFieldDelimiter.Semicolon, AddQuotesToDates = false }; using (var writer = new StringWriter()) using (var csvFile = QueryToFileTask.CreateCsvWriter(options.GetFieldDelimeterAsString(), writer)) using (var reader = new DataTableReader(dt)) { var entries = QueryToFileTask.DataReaderToCsv(reader, csvFile, options, new System.Threading.CancellationToken()); csvFile.Flush(); var result = writer.ToString(); var resultLines = result.Split("\r\n", StringSplitOptions.None); // 4 lines = 1 header line + 2 data lines + 1 newline at end of file Assert.AreEqual(4, resultLines.Length); Assert.AreEqual(2, entries); Assert.AreEqual("col_string;col_datetime;col_float", resultLines[0]); Assert.AreEqual("\"Hello\\\"semicolon1\";12-31-2018 11:22:33;3000.212", resultLines[1]); Assert.AreEqual("\"Hello\\\"semicolon2\";12-31-2018 11:22:34;3000.212", resultLines[2]); } }