/// <summary> /// Loads the database for this instance. /// may be called multiple times, if uploading multiple CSV files. /// </summary> /// <param name="fileName"></param> /// <returns></returns> public override bool LoadSchema(string fileName) { //enforce that the filename must be a known configuration. if (!FileIsKnown(fileName)) { return(false); } using (var dbPreview = new CsvReader(new StreamReader(fileName), true)) { if (CsvDataToImport == null) { CsvDataToImport = new List <CSVInstance>(); DataNodes = new List <DataNode>(); } //a local tableNode object, which will track this one of multiple CSV files that may be imported var tableNodes = new List <DataNode>(); CsvDataToImport.Add(new CSVInstance(fileName) { TableNodes = tableNodes, RecordType = GetRecordTypeFromFilename(fileName) }); var currentIndex = 0; var tableItem = new DataNode { Name = Path.GetFileNameWithoutExtension(fileName) }; var firstRow = dbPreview.ElementAtOrDefault(0); if (firstRow != null) { foreach (var columnName in dbPreview.GetFieldHeaders()) { var childItem = new DataNode { Name = columnName, NodeType = typeof(string), Value = firstRow[currentIndex] ?? string.Empty }; childItem.Parent.Add(tableItem); tableItem.Children.Add(childItem); currentIndex++; } tableNodes.Add(tableItem); DataNodes.Add(tableItem); //this is to maintain compatibility with the base Excavator object. } return(tableNodes.Count() > 0 ? true : false); } }
/// <summary> /// Loads the database for this instance. /// may be called multiple times, if uploading multiple CSV files. /// </summary> /// <param name="fileName"></param> /// <returns></returns> public override bool LoadSchema( string fileName ) { //enforce that the filename must be a known configuration. if ( !FileIsKnown( fileName ) ) return false; var dbPreview = new CsvReader( new StreamReader( fileName ), true ); if ( CsvDataToImport == null ) { CsvDataToImport = new List<CsvDataModel>(); TableNodes = new List<DatabaseNode>(); } //a local tableNode object, which will track this one of multiple CSV files that may be imported List<DatabaseNode> tableNodes = new List<DatabaseNode>(); CsvDataToImport.Add( new CsvDataModel( fileName ) { TableNodes = tableNodes, RecordType = GetRecordTypeFromFilename( fileName ) } ); var tableItem = new DatabaseNode(); tableItem.Name = Path.GetFileNameWithoutExtension( fileName ); int currentIndex = 0; var firstRow = dbPreview.ElementAtOrDefault( 0 ); if ( firstRow != null ) { foreach ( var columnName in dbPreview.GetFieldHeaders() ) { var childItem = new DatabaseNode(); childItem.Name = columnName; childItem.NodeType = typeof( string ); childItem.Value = firstRow[currentIndex] ?? string.Empty; childItem.Table.Add( tableItem ); tableItem.Columns.Add( childItem ); currentIndex++; } tableNodes.Add( tableItem ); TableNodes.Add( tableItem ); //this is to maintain compatibility with the base Excavator object. } return tableNodes.Count() > 0 ? true : false; }