Есть вот такой метод:
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
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости