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 object ReadHeader(Stream p_Stream, int p_BufferSize = StreamToDataTableRows.DefaultCopyBufferSize) { DataSet ds = new DataSet(); //read size as integer byte[] schemaLenBytes = new byte[4]; p_Stream.Read(schemaLenBytes, 0, 4); int schemaLen = BitConverter.ToInt32(schemaLenBytes, 0); //copy from p_Stream (limited bytes) to new MemoryStream and deserialize schema and create emtpy Table using (MemoryStream ms = new MemoryStream()) { SqlStreamEngine.CopyStreamWithLengthLimit(p_Stream, ms, schemaLen, p_BufferSize); ms.Position = 0; ds.ReadXmlSchema(ms); } return(ds.Tables[0]); }