Sdílet prostřednictvím


Vyrovnávací paměti

Paměťový buffer je jakákoliv část paměti aplikace používaná k předávání dat mezi aplikací a ovladačem. Například vyrovnávací paměti aplikace mohou být asociovány a připojeny ke sloupcům sady výsledků s pomocí SQLBindCol. Během načítání každého řádku jsou data vracena pro každý sloupec v těchto vyrovnávacích pamětech. Vstupní vyrovnávací paměti slouží k předávání dat z aplikace do ovladače; Výstupní vyrovnávací paměti se používají k vrácení dat z ovladače do aplikace.

Poznámka:

Pokud funkce ODBC vrátí SQL_ERROR, obsah všech výstupních argumentů této funkce není definován.

Tato diskuze se týká především vyrovnávací paměti neurčitého typu. Adresy těchto vyrovnávacích pamětí se zobrazují jako argumenty typu SQLPOINTER, například argument TargetValuePtr v SQLBindCol. Některé z zde probíraných položek, například argumenty použité s vyrovnávacími pamětmi, se však vztahují také na argumenty používané k předání řetězců ovladači, jako je například argument TableName v SQLTables.

Tyto vyrovnávací paměti obvykle jsou ve dvojicích. Vyrovnávací paměti dat se používají k předání samotných dat, zatímco vyrovnávací paměti délky a indikátoru se používají k předání délky dat v vyrovnávací paměti dat nebo ke zvláštní hodnotě, jako je SQL_NULL_DATA, což označuje, že data mají hodnotu NULL. Délka dat v vyrovnávací paměti dat se liší od délky samotné vyrovnávací paměti dat. Následující obrázek znázorňuje vztah mezi vyrovnávací pamětí dat a vyrovnávací pamětí délky a ukazatele.

Vyrovnávací paměť dat a délka/indikátorová paměť

Vyrovnávací paměť pro délku a indikátor se vyžaduje, když vyrovnávací paměť dat obsahuje data o délce proměnných, jako jsou znaková nebo binární data. Pokud vyrovnávací paměť dat obsahuje data s pevnou délkou, například celé číslo nebo strukturu kalendářních dat, je potřeba vyrovnávací paměť délky a ukazatele pouze k předání hodnot ukazatele, protože délka dat je již známa. Pokud aplikace používá vyrovnávací paměť délky/indikátoru s daty s pevnou délkou, ovladač ignoruje jakékoli délky předané v této paměti.

Délka vyrovnávací paměti dat i dat, která obsahuje, se měří v bajtech, na rozdíl od znaků. Tento rozdíl není důležitý pro programy, které používají řetězce ANSI, protože délky v bajtech a znacích jsou stejné.

Pokud vyrovnávací paměť dat představuje pole popisovače definované ovladačem, diagnostické pole nebo atribut, měla by aplikace indikovat správci ovladače povahu argumentu funkce, která označuje hodnotu pole nebo atributu. Aplikace to provede nastavením argumentu délky v jakémkoli volání funkce, která nastaví pole nebo atribut na jednu z následujících hodnot. (Totéž platí pro funkce, které načítají hodnoty pole nebo atributu, s výjimkou, že argument odkazuje na hodnoty, které pro funkci nastavení jsou v samotném argumentu.)

  • Pokud argument funkce, který označuje hodnotu pole nebo atributu, je ukazatel na řetězec znaku, je délka argumentu délka řetězce nebo SQL_NTS.

  • Pokud argument funkce, který označuje hodnotu pole nebo atributu, je ukazatel na binární vyrovnávací paměť, aplikace umístí výsledek makra SQL_LEN_BINARY_ATTR(délka) do argumentu délky . Tím se v argumentu délka umístí záporná hodnota.

  • Pokud je argument funkce, který označuje hodnotu pole nebo atributu, ukazatel na jinou hodnotu než řetězec znaku nebo binární řetězec, měl by argument délky obsahovat hodnotu SQL_IS_POINTER.

  • Pokud argument funkce označující hodnotu pole nebo atributu obsahuje hodnotu s pevnou délkou, argument délky je podle potřeby SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT nebo SQL_ISI_USMALLINT.

Tato část obsahuje následující témata.