DataRow.Field<T>(string Column) кидает ошибку преобразования

176
01 октября 2017, 23:14

Есть вот такой метод:

 Dictionary<string, string> GetColumnsList(OleDbConnection conn, string tableName)
        {
            var columns = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new[] { null, null, tableName, null });
            return columns.AsEnumerable().
                Select(x => new
                {
                    ColumnName = x.Field<string>("Column_Name"),
                    Description = $"Data_Type:{ x.Field<int>("Data_Type")};"+
                                  $"IsNullable:{ x.Field<bool>("IS_NULLABLE")};"+
                                  $"CharacterMaximumLength: { x.Field<int?>("Character_Maximum_Length")};"+
                                  $"CharacterOctetLength: { x.Field<int?>("Character_Octet_Length")}"
        }).ToDictionary(key => key.ColumnName, value => value.Description);
        }

Так вот, не могу понять, почему вылетает исключение при попытке использовать int?.

Сами по себе колонки в DataTable имеют тип int.

System.InvalidCastException: 'Specified cast is not valid.'

at System.Data.DataRowExtensions.UnboxT1.NullableField[TElem](Object value) at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName) at AccessToMySql.Classes.AccessReader.<>c.<GetColumnsList>b__5_0(DataRow x) in D:\Projects\AccessToMySql\AccessToMySql\Classes\AccessReader.cs:line 52 at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext()
at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func2 keySelector, Func2 elementSelector, IEqualityComparer1 comparer) at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func2 keySelector, Func`2 elementSelector) at AccessToMySql.Classes.AccessReader.GetColumnsList(OleDbConnection conn, String tableName) in D:\Projects\AccessToMySql\AccessToMySql\Classes\AccessReader.cs:line 51 at AccessToMySql.Classes.AccessReader.ProcessingMdb(String pathToMdb) in D:\Projects\AccessToMySql\AccessToMySql\Classes\AccessReader.cs:line 37 at AccessToMySql.Classes.AccessReader.Read() in D:\Projects\AccessToMySql\AccessToMySql\Classes\AccessReader.cs:line 26 at AccessToMySql.Program.Main(String[] args) in D:\Projects\AccessToMySql\AccessToMySql\Program.cs:line 17

READ ALSO
Некорректное отображение в textbox

Некорректное отображение в textbox

отображаются кракозябры при выводе потока(текст русский)Пытался преобразовать в стандартную кодировку для ОС(последние 3 строки) и вывести,...

152
Передача WordDocument по сслыке

Передача WordDocument по сслыке

Пытаюсь передать WordWocument в функцию по ссылке:

211
Как отрыть бинарный файл в Xamarin PCL?

Как отрыть бинарный файл в Xamarin PCL?

Мне нужно создать Мобильное приложение, которое открывает бинарный файл и записывает данные в массивРешил выбрать Xamarin для этого дела

179
Как без использования сторонних утилит (psexec, sc, tasksheduler) запустить программу от LocalSystem?

Как без использования сторонних утилит (psexec, sc, tasksheduler) запустить программу от LocalSystem?

Пробовал через SimpleImpersonation: https://githubcom/mj1856/SimpleImpersonation, ни в какую не получается

168