public StreamToEnumerableDataRows(Stream p_Stream, DataTable p_DataTable, ISqlValueSerializer p_Serializer, int p_BufferSize = StreamToDataTableRows.DefaultCopyBufferSize) { _Stream = p_Stream; _DataTable = p_DataTable; _Serializer = p_Serializer; _BufferSize = p_BufferSize; }
private void TestSqlValueSerializerForReadingAndWriting(ISqlValueSerializer p_SqlValueSerializer, int p_BufferSize) { var sql = @" DECLARE @p0 dbo.tt_ReportManagerSelectList INSERT INTO @p0 VALUES('CisloPozadavku','Neagregovan','','False','0') INSERT INTO @p0 VALUES('Mena','Neagregovan','','False','0') INSERT INTO @p0 VALUES('Tarif','Neagregovan','','False','0') INSERT INTO @p0 VALUES('Sezona','Neagregovan','','False','0') INSERT INTO @p0 VALUES('CK','Neagregovan','','False','1') INSERT INTO @p0 VALUES('CKa','Neagregovan','','False','1') INSERT INTO @p0 VALUES('P1','Neagregovan','','False','1') INSERT INTO @p0 VALUES('KrNC','Neagregovan','','False','1') INSERT INTO @p0 VALUES('PNC','Neagregovan','','False','1') INSERT INTO @p0 VALUES('KM','Neagregovan','','False','1') INSERT INTO @p0 VALUES('KC','Neagregovan','','False','1') INSERT INTO @p0 VALUES('PM','Neagregovan','','False','1') INSERT INTO @p0 VALUES('PC','Neagregovan','','False','1') INSERT INTO @p0 VALUES('SpotrebaMWh','Neagregovan','','False','0') INSERT INTO @p0 VALUES('VaR','Neagregovan','','False','1') INSERT INTO @p0 VALUES('VaRZaMWh','Neagregovan','','False','1') INSERT INTO @p0 VALUES('ZdaAkceptovany','Neagregovan','','False','9') INSERT INTO @p0 VALUES('PocetDnu','Neagregovan','','False','0') INSERT INTO @p0 VALUES('Poznamka','Neagregovan','','False','0') INSERT INTO @p0 VALUES('IdOceneni','Neagregovan','','False','1') INSERT INTO @p0 VALUES('Produkt','Neagregovan','','False','0') INSERT INTO @p0 VALUES('PozadavekCilOceneni','Neagregovan','','False','0') INSERT INTO @p0 VALUES('IdDiagram_Template','Neagregovan','','False','1') INSERT INTO @p0 VALUES('IdDiagramBurza_Template','Neagregovan','','False','1') INSERT INTO @p0 VALUES('IdOceneniCenovyElement','Neagregovan','','False','1') INSERT INTO @p0 VALUES('IdOceneniStav','Neagregovan','','False','1') INSERT INTO @p0 VALUES('IdPozadavek','Neagregovan','','False','1') INSERT INTO @p0 VALUES('Obor','Neagregovan','','False','0') INSERT INTO @p0 VALUES('IdOceneniDiagram','Neagregovan','','False','1') INSERT INTO @p0 VALUES('IdOceneniTyp','Neagregovan','','False','1') INSERT INTO @p0 VALUES('WorkflowInstanceState','Neagregovan','','False','0') INSERT INTO @p0 VALUES('WorkflowProcesState','Neagregovan','','False','0') INSERT INTO @p0 VALUES('ViditelnostDleStavuOceneni','Neagregovan','','False','9') INSERT INTO @p0 VALUES('IdPozadavekTypNakupu','Neagregovan','','False','1') DECLARE @p1 dbo.tt_ReportManagerFilterList INSERT INTO @p1 VALUES('o.IdOceneniStav','JeVSeznamu','7','','0') INSERT INTO @p1 VALUES('ob.IdObor','JeVSeznamu','2','','0') DECLARE @p2 dbo.tt_ReportManagerOrderBy INSERT INTO @p2 VALUES('IdOceneni','Sestupne') INSERT INTO @p2 VALUES('Mena','Vzestupne') EXECUTE Oept.p_rd_OceneniAkceptace @SelectList=@p0,@FilterList=@p1,@OrderBy=@p2,@SelectTop=10000,@Aggregation=0,@UserName='******' "; var cmd = new SqlCommand(sql, CreateConnection()); //ACT with ASSERT using (var sqlDataReaderStream = new SqlStream(cmd, p_SqlValueSerializer)) { var table = sqlDataReaderStream.DataTableWithoutData; Assert.AreEqual(0, table.Rows.Count); new StreamToDataTableRows().ReadStreamToDataTable(sqlDataReaderStream, table, p_SqlValueSerializer, p_BufferSize); Assert.AreEqual(6194, table.Rows.Count); } }
public StreamToEnumaratorDataRows(Stream p_Stream, DataTable p_DataTable, ISqlValueSerializer p_Serializer, int p_BufferSize) { _Stream = p_Stream; _DataTable = p_DataTable; _Serializer = p_Serializer; _Buffer = new byte[p_BufferSize]; _Queue = new Queue <DataRow>(); _LastRowMayBeOnlyFirstFragment = string.Empty; _ColumnTypes = new List <TypeWithConverter>(p_DataTable.Columns.Count); foreach (DataColumn column in p_DataTable.Columns) { _ColumnTypes.Add(new TypeWithConverter(column.DataType, TypeDescriptor.GetConverter(column.DataType))); } }
private void TestSqlValueSerializerForReadingAndWriting(ISqlValueSerializer p_SqlValueSerializer, int p_BufferSize = 8192) { var cmd = new SqlCommand("SELECT * FROM TestTable", ConnectHelper.CreateConnection()); //ACT with ASSERT using (var sqlDataReaderStream = new SqlStream(cmd, p_SqlValueSerializer)) { var table = sqlDataReaderStream.DataTableWithoutData; Assert.AreEqual(0, table.Rows.Count); new StreamToDataTableRows().ReadStreamToDataTable(sqlDataReaderStream, table, p_SqlValueSerializer, p_BufferSize); Assert.AreEqual(3, table.Rows.Count); Assert.AreEqual(@"Test Tab and NewLine is ok", table.Rows[2]["TestString"], "Failed test string with special chars (same as RowSplitter and ColumnSplitter in Csv format)"); } }
public SqlStream(SqlCommand p_SqlCommand, ISqlValueSerializer p_SqlValueSerializer, DuplicateColumnNameProcess p_DuplicateColumnNameProcess = DuplicateColumnNameProcess.DuplicateNameException, IEnumerable <ISqlStreamHeader> p_SqlStreamHeader = null, Action <DataTable> p_DataTableSchemaCreated = null) { _DataReader = p_SqlCommand.ExecuteReader(CommandBehavior.CloseConnection); try { _StreamEngine = new SqlStreamEngine(_DataReader, new MemoryStream(), p_SqlValueSerializer, p_DuplicateColumnNameProcess, p_SqlStreamHeader, p_DataTableSchemaCreated); } catch { _DataReader.Close(); _DataReader.Dispose(); throw; } }
public SqlStreamEngine(SqlDataReader p_DataReader, Stream p_Stream, ISqlValueSerializer p_SqlValueSerializer, DuplicateColumnNameProcess p_DuplicateColumnNameProcess, IEnumerable <ISqlStreamHeader> p_SqlStreamHeader, Action <DataTable> p_DataTableSchemaCreated = null) { _DataReader = p_DataReader; _BufferStream = p_Stream; _SqlValueSerializer = p_SqlValueSerializer; _DuplicateColumnNameProcess = p_DuplicateColumnNameProcess; var table = _DataReader.GetSchemaTable(); DataTableWithoutData = new DataTable(); foreach (DataRow row in table.Rows) { var columnName = row["ColumnName"].ToString(); var dataType = Type.GetType(row["DataType"].ToString()) ?? throw new Exception("SqlDataReader.GetSchemaTable must return column with name DataType"); if ((_DuplicateColumnNameProcess == DuplicateColumnNameProcess.DuplicateColumnsWithNamePostfixWithData || _DuplicateColumnNameProcess == DuplicateColumnNameProcess.DuplicateColumnsWithNamePostfixWithoutData) && DataTableWithoutData.Columns.Contains(columnName)) { var uniqueColumnName = UniqueColumnName(columnName, DataTableWithoutData.Columns); var column = new DataColumn(uniqueColumnName, dataType); column.ExtendedProperties[OriginalColumnName] = columnName; _DuplicateNameExceptionPreventUsed = true; DataTableWithoutData.Columns.Add(column); continue; } DataTableWithoutData.Columns.Add(new DataColumn(columnName, dataType)); } p_DataTableSchemaCreated?.Invoke(DataTableWithoutData); if (p_SqlStreamHeader != null) { foreach (var sh in p_SqlStreamHeader) { sh.WriteToStream(_BufferStream, DataTableWithoutData); } } _StreamLengthWithValidData = _BufferStream.Position; }
public void ReadStreamToDataTable(Stream p_Stream, DataTable p_DataTable, ISqlValueSerializer p_Serializer, int p_BufferSize = DefaultCopyBufferSize) { byte[] buffer = new byte[p_BufferSize]; var readed = int.MaxValue; _LastRowMayBeOnlyFirstFragment = string.Empty; List <TypeWithConverter> columnTypes = new List <TypeWithConverter>(p_DataTable.Columns.Count); foreach (DataColumn column in p_DataTable.Columns) { columnTypes.Add(new TypeWithConverter(column.DataType, TypeDescriptor.GetConverter(column.DataType))); } while (readed > 0) { readed = p_Stream.Read(buffer, 0, buffer.Length); var readedString = _LastRowMayBeOnlyFirstFragment + Encoding.UTF8.GetString(buffer, 0, readed); IEnumerable <object[]> readedSplitted = p_Serializer.ReadValues(readedString, columnTypes, out _LastRowMayBeOnlyFirstFragment); foreach (object[] rowData in readedSplitted) { p_DataTable.Rows.Add(rowData); } } }