public static DataTable CreateSchemaTable(this QueryReader queryReader) { if (queryReader == null) { throw new ArgumentNullException(nameof(queryReader)); } var dataTable = new DataTable(@"Results"); var existingColumnNames = new HashSet <string>(); for (var i = 0; i < queryReader.ColumnCount; i++) { var columnName = queryReader.GetColumnName(i); var uniqueColumnName = GenerateUniqueColumnName(existingColumnNames, columnName); var columnType = queryReader.GetColumnType(i); var dataColumn = new DataColumn(uniqueColumnName, columnType); dataColumn.Caption = columnName; dataTable.Columns.Add(dataColumn); existingColumnNames.Add(uniqueColumnName); } return(dataTable); }
/// <summary> /// Gets the data type information for the specified field. /// </summary> /// <param name="i">The index of the field to find.</param> /// <returns> /// The data type information for the specified field. /// </returns> /// <exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount" />.</exception> public string GetDataTypeName(int i) { EnsureNotDisposed(); return(_queryReader.GetColumnType(i).FullName); }