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;
 }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
 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)));
     }
 }
Exemple #4
0
        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)");
            }
        }
Exemple #5
0
 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;
     }
 }
Exemple #6
0
        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);
                }
            }
        }