Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Vstupní parametry odkazující na data znaků s proměnnou délkou (například názvy sloupců, dynamické parametry a hodnoty atributů řetězce) mají přidružený parametr délky. Pokud aplikace ukončuje řetězce znakem null, jak je typické v jazyce C, poskytuje jako argument délku řetězce (nezahrnuje ukončovací znak null) nebo SQL_NTS (Null-Terminated String). Argument nezáporné délky určuje skutečnou délku přidruženého řetězce. Argument délka může být 0 pro zadání řetězce nulové délky, který se liší od hodnoty NULL. Záporná hodnota SQL_NTS směruje ovladač k určení délky řetězce vyhledáním znaku ukončení nulou.
Při vrácení znakových dat z ovladače do aplikace musí ovladač vždy připojit koncový nulový znak. Aplikace tak může zvolit, jestli se mají data zpracovávat jako řetězec nebo pole znaků. Pokud vyrovnávací paměť aplikace není dostatečně velká, aby vrátila všechna data znaků, ovladač zkrátí data na délku odpovídající velikosti vyrovnávací paměti minus počet bajtů potřebných pro ukončovací znak hodnoty null, ukončí zkrácená data nulovým znakem a uloží je do vyrovnávací paměti. Aplikace proto musí vždy přidělit dodatečné místo pro ukončovací znak null ve vyrovnávací paměti použité k načtení znakových dat. Například k načtení 50 znaků dat je potřeba 51 bajtová vyrovnávací paměť.
Při odesílání nebo načítání dlouhých znakových dat v částech pomocí SQLPutData nebo SQLGetData je třeba věnovat zvláštní pozornost jak aplikaci, tak ovladači. Pokud jsou data předána jako řada řetězců s ukončením null, musí být znaky ukončení null v těchto řetězcích odstraněny, aby bylo možné data znovu sestavit.
Řada programátorů ODBC má zmatená data znaků a řetězce jazyka C. K tomu došlo, je artefaktem použití jazyka C při definování funkcí ODBC. Pokud ovladač ODBC nebo aplikace používá jiný jazyk – mějte na paměti, že rozhraní ODBC je nezávislé na jazyce – toto zmatení je méně pravděpodobné, že vznikne.
Pokud se řetězce jazyka C používají k ukládání znakových dat, nulový znak se nepovažuje za součást dat a není počítán jako součást jejich délky v bajtech. Například znaková data "ABC" mohou být uložena jako řetězec C "ABC\0" nebo pole znaků {'A', 'B', 'C'}. Délka bajtu dat je 3, ať už je považována za řetězec nebo znakovou matici.
I když aplikace a ovladače běžně používají řetězce jazyka C (pole znaků ukončené nulou) k uložení znakových dat, není to nutné. V jazyce C lze data znaků také považovat za pole znaků (bez nulového ukončovacího znaku) a jejich délka v bajtech je předána samostatně ve vyrovnávací paměti pro délku/ukazatel.
Vzhledem k tomu, že data znaků mohou být uložena v poli bez hodnoty null a její bajtová délka předána samostatně, je možné vložit znaky null do dat znaků. Chování funkcí ODBC v tomto případě je však nedefinováno a je specifické pro ovladač, zda ovladač tuto funkci zpracovává správně. Interoperabilní aplikace by proto měly vždy zpracovávat data znaků, která mohou obsahovat vložené znaky null jako binární data.