Каковы ограничения для типов данных ADO? - PullRequest
4 голосов
/ 02 августа 2011

Я пытаюсь определить соответствующие типы данных параметра команды ADO, которые будут использоваться для вызова хранимой процедуры SQL Server (2005). Я специально сначала попытался определить соответствующий тип данных ADO, который бы соответствовал типу данных SQL Server varchar(MAX). Я думаю, что это может быть adVarChar, но я не уверен.

Почему размер (например, количество символов для строковых типов, диапазон для числовых типов) для каждого из этих типов данных не указан в документации ?! И почему на первый взгляд невозможно найти удобную таблицу, в которой перечислены все типы данных и максимальное количество информации, , которое можно добавить в каждый из них ?! Вы могли бы подумать, что кто-то заметит, вероятно, миллионов вопросов, связанных с вариантами «Почему мои данные усекаются?» ...

Разъяснение - Приведенная выше информация является просто конкретным примером, иллюстрирующим полезность знания пределов типов данных ADO, например, выбрать подходящий тип данных ADO для обработки определенных типов данных для различных источников данных.

1 Ответ

9 голосов
/ 02 августа 2011

Определенная часть

varchar(MAX) может использоваться из ADO в качестве входного параметра.
Тип данных в этом случае будет adLongVarChar, максимальная длина &h7FFFFFFF, как задокументировано здесь .

Хотя он не может использоваться в качестве выходного параметра.
Также он не может использоваться в качестве типа поля в возвращенной записи (смешно - .Value равно Empty,потому что это на самом деле длинный тип, но GetChunk может не вызываться для извлечения фактических данных, потому что ADO считает, что это не длинный тип).

Если вам нужно использовать varchar(MAX) в качестве выходного параметра, используя VBA/ ADO, вам нужно будет select, чтобы вернуть клиенту набор записей, и вам придется привести его к text при этом:

select cast(@var as text) as data;
return 0;

Тогда вы скажете s = .Fields(0).GetChunk(.Fields(0).ActualSize)чтобы получить данные из открытого набора записей.


Абстрактная часть

Суть ADO состоит в том, чтобы абстрагироваться от различий между различными источниками данных.Как только есть драйвер доступа к данным, поддерживающий интерфейс, вы (в идеале) можете говорить с ним, не беспокоясь о том, что это такое.

Как и любая абстракция, этот также leaky .

Точное знание того, какие типы данных, какие серверы соответствуют каким типам данных ADO, приходит из опыта.То есть.

Некоторые практические правила, однако, могут быть разработаны довольно быстро:

  • Нетрудно определить возможные типы данных ADO путем сопоставления их имен с данными.введите имена конкретного сервера:

    • int - adInteger
    • datetime - adDBDate (хотя здесь вы можете столкнуться с пробой и ошибкой)
  • Некоторые типы данных называются BLOB (большие двоичные объекты).Они предназначены для хранения огромного объема данных и обычно представлены в документации источника данных как таковой.Для них соответствующий тип данных ADO может содержать в своем имени Long, что в мире ADO означает «BLOB» (adLongVarBinary, adLongVarChar, adLongVarWChar).

  • Любую информацию о точной длине типа данных можно найти в документации к источнику данных, а не в документации ADO.Для таких вещей, как:

    • Максимальная длина, установленная разработчиком для определенного столбца в этой конкретной таблице (например, varchar(10))
    • Максимальная теоретическая длина типа данных BLOB (например,как varchar(max))

    вы будете обращаться к соответствующему источнику данных, а не к ADO.

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