Въпреки че наборът от данни е разрешен за „запълване“ на адаптер за данни, обикновено използвам DataTable вместо това, тъй като при заявка очаквам само един набор от резултати. Като казах това, бих направил предварително запитване към таблицата, само за да получа нейната структура... нещо като
select whatever from yourTable(s) where 1=2
Това ще получи очакваните колони с резултати, когато направите
DataTable myTable = new DataTable();
YourAdapter.Fill( myTable );
Сега, след като имате локална таблица, която няма да се провали за размера на съдържанието, защото няма да бъдат върнати записи, сега можете изрично да отидете до въпросната колона и да зададете информация за нейния тип данни/размер, както ви е необходимо...
myTable.Columns["NameOfProblemColumn"].WhateverDataType/Precision = Whatever you need...
СЕГА вашата локална схема е легитимна и проблемната колона ще бъде идентифицирана с нейната точност. Сега поставете вашата правилна заявка с подходяща клауза where, а не 1=2, за да върнете действително данни... Тъй като няма действителни редове при първото преминаване, дори не е необходимо да правите myTable.Clear()
за да изчистите редовете... Просто стартирайте отново заявката и dataAdapter.Fill()
.
Всъщност не съм опитвал, тъй като нямам вашите проблеми с данните, за да симулирам същия проблем, но теоретичният процес трябва да ви помогне, без да се налага изрично да преминавате през всички колони... само няколкото, които може да представляват проблема.