Member 14476420 Ответов: 2

Объект DataReader.getfieldtype(55) возвращает null - ошибка


Использование Windows forms и vb.net

Я испытываю DataReader.GetFieldType(55) возвращается значение null ошибка, которая имеет отношение к пропавшей типы SQL сервера.

Я не могу воспроизвести ошибку со своего компьютера, она возникает только на других компьютерах, поэтому я не знаю, в какой части кода она ошибается.

Что я уже пробовал:

Я добавил в свой проект библиотеку DLL типов sql server, а также папку SqlServerTypes с x64, x86 и Loader.cs внутри.

Я преобразовал Loader.cs в vb, используя ссылку на ответ ниже.

Я также добавил Это в свое приложение.config:
<dependentAssembly>
    <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-14.0.0.0" newVersion="14.0.0.0" />
  </dependentAssembly>

Gerry Schmitz

Получите копию базы данных / таблицы, в которой есть проблема, и протестируйте ее. Возможно, ваша база данных не синхронизирована / устарела.

2 Ответов

Рейтинг:
2

OriginalGriff

Видеть здесь: объект DataReader.GetFieldType возвращает null[^]


Member 14476420

Спасибо, но, как я уже объяснил в своем вопросе, я уже пробовал это сделать

Рейтинг:
1

Dave Kreskowiak

Если он возвращает null, есть две возможности. Во-первых, в результирующем наборе, через который проходит DataReader, нет 55-го столбца.

И во-вторых, возвращаемый столбец действительно существует, но определяется как UserDefinedType на стороне базы данных. Вы не можете получить тип на стороне клиента для одного из них. Ваш запрос должен будет разбить тип пользователя на кучу базовых полей, содержащих соответствующие данные.


Member 14476420

запуск этого запроса в базе данных: select * from sys.types order by system_type_id asc
Я вижу, что нет никакого типа данных sql server 55, так что, возможно, 2-я часть вашего ответа-это путь

Dave Kreskowiak

В SQL server Нет такого понятия, как тип 55. Вы, кажется, не понимаете, что делает GetFieldType. Он возвращает эквивалентный .NET Framework тип типа базы данных для номера столбца в результирующем наборе запроса SELECT в DataReader.

Мы не можем сказать вам, что не так, потому что se не может видеть неисправный код, и мы ничего не знаем о дизайне вашей базы данных и о том, что должен возвращать ваш запрос.

О, и если вы используете SELECT * в своем запросе, вы совершаете огромную ошибку.


Он не идет в базу данных и не пытается найти информацию о типе для некоторого произвольного "типа #55".

То, что вы сказали коду сделать, это получить .Чистый тип для 55-го столбца результирующего набора ваш SqlDataReader возвращается из базы данных.