Barvna shema: Temna
Trenutno dejavna stran: start » sl » Dokumentacija » Integracija podatkov in dostop do podatkov » Gonilnik WKL OData ODBC » Referenčni priročnik gonilnika OData ODBC » Omejitve in znane pomanjkljivosti

Omejitve in znane pomanjkljivosti

Česa gonilnik OData ODBC ne zmore ali kaj počne drugače kot gonilnik ODBC SQL Serverja, in zakaj. Vsaka omejitev navaja, kje je opisana rešitev.

Omejitve

  • Samo OData v4 z JSON. OData v2/v3 in storitve brez $metadata niso podprte.
  • 32- in 64-bitna različica: 32-bitna aplikacija naloži samo gonilnik x86, 64-bitna aplikacija samo gonilnik x64. Namestitveni paket namesti oba; zahteva 64-bitni Windows.
  • Transakcije samo, kjer jih storitev podpira. Če storitev v $metadata deklarira naslov za transakcije (Store.Transactions, tako na primer podatkovni prehod Wkl.Data.Gateway), BeginTrans, CommitTrans in Rollback v VBA/DAO ter BeginTransaction v ADO.NET delujejo kot prek gonilnika SQL Serverja. Brez te deklaracije gonilnik ne javlja podpore za transakcije: ADO.NET pri BeginTransaction dobi napako HYC00, Access pa BeginTrans v tem primeru obdrži zase – Rollback na storitvi ničesar ne razveljavi. Če se povezava prekine med CommitTrans, ni znano, ali je bilo shranjeno. Kako to preverite pred uporabo in kaj se zgodi pri napakah, je opisano v Transakcije.
  • Na zasedeno storitev gonilnik počaka. Če storitev na branje odgovori s 429 (preveč zahtev) ali 503 (začasno ni na voljo), gonilnik počaka toliko, kolikor pove Retry-After, in vpraša znova; brez tega podatka počaka 1, 2, 4, 8 in 16 sekund. Posamezne čakalne dobe nad 60 sekund ali skupno več kot 120 sekund ne počaka, temveč javi HYT00 s časom storitve. Zasedena storitev ne odpre pogovornega okna Poveži. RETRY=OFF izklopi tudi čakanje.
  • Ponovitev po prekinitvi povezave je vklopljena. Gonilnik bralne in pisalne zahteve ponovi po 1 in 3 sekundah; pri pisanju je to varno samo, če storitev upošteva Idempotency-Key. Za storitev, ki tega ne počne, ponovitev izklopite z RETRY=OFF. Glejte Zaveze glede na vrsto storitve.
  • CommandBuilder ADO.NET v privzeti nastavitvi potrebuje prepustno pot ali drugo pravilo sočasnosti; glejte ADO.NET in Visual Studio.
  • ADO.NET DateTime prenese samo na milisekundo; glejte ADO.NET in Visual Studio.
  • Samo kar je mogoče prevesti – ali posredovati. Stavek, ki ne ustreza poizvedbi OData, se zavrne, če povezava ne navaja naslova za lastne stavke (glejte Kako gonilnik prevaja stavke). Gonilnik v nobenem primeru tiho ne naloži cele množice entitet, da bi lokalno filtriral.
  • Urejanje brez ključa samo, če ga storitev podpira. Množica entitet brez ključa je samo za branje, razen če $metadata zanjo deklarira dejanji UpdateByOriginal in DeleteByOriginal. Tedaj Access zapis navede z njegovimi starimi vrednostmi; enaki zapisi ostanejo nespremenljivi.
  • Spreminjanje in brisanje potrebujeta različico vrstice, ki jo deklarira storitev. Če jo deklarira – shranjen stolpec ali izračunano vrednost –, jo Access uporabi kot edini dodatni pogoj, gonilnik pa iz nje naredi If-Match; konflikt pri pisanju se v tem primeru v Accessu pojavi kot tak. Če je ne deklarira, Access v pogoj postavi stare vrednosti vseh stolpcev. Tega v OData ni mogoče izraziti, zato gonilnik to zavrne, namesto da bi preverjanje tiho opustil: sicer bi sprememba prepisala spremembo nekoga drugega, čeprav Access predpostavlja, da je to izključeno. Ustvarjanje je mogoče tudi brez različice vrstice. Rešitev zagotovi storitev, ne gonilnik: deklarira različico vrstice ali izračunan žig.
  • Preveden stavek bere natanko eno množico entitet; spoji in podpoizvedbe se izvedejo samo prek prepustne poti, glejte Podprti SQL.
  • LIKE samo v oblikah x%, %x, %x% in brez _ kot nadomestnega znaka ([_] in ubežni znak sta dovoljena); glejte Podprti SQL.
  • Kazalec bere naprej, brez zaznamkov in brez zaklepanja.
  • Nekaj znakov ostane v imenu kodiranih (!, ", ., [, ], `, krmilni znaki, presledki na začetku); glejte Odpravljanje težav.
  • Ime z več kot 64 znaki v Accessu ne uspe, kot prek gonilnika SQL Serverja; glejte Odpravljanje težav.
  • Access deli povezave po DATABASE. Dve povezani tabeli z enakim DATABASE uporabljata isto povezavo, tudi pri različnem URL – in v tem primeru tiho bereta in pišeta podatke prvega korena storitve. Gonilnik o tem ne izve ničesar in tega ne more preprečiti; pravilo za nastavitev je v Več korenov storitve v eni datoteki. Prav tako si povezavo delijo povezane tabele, ki se razlikujejo samo v ROLE=; v tem primeru velja identiteta podatkovne zbirke prve povezave. Različni koreni storitve in druga identiteta v isti seji zato potrebujejo različne vrednosti DATABASE; gonilnik eno dopolni, če je niz ne navaja. Glejte Niz povezave gonilnika.
  • Pogovorno okno se pojavi samo, kjer ga aplikacija dovoli: z oknom in ne s SQL_DRIVER_NOPROMPT. Brez okna storitev nepopolno povezavo zavrne. Če Access odpre povezano tabelo brez shranjenega gesla, se gonilnik prijavi z nazadnje uporabljenim imenom, katerega geslo je shranjeno s „Shrani geslo“; sicer vpraša s kratkim obrazcem za prijavo. Po „Prekliči“ za isto storitev pet sekund ne vpraša znova.
  • Access ob neuspeli vzpostavitvi povezave prikaže samo DAO 3151; glejte Odpravljanje težav.
  • Posredovan stavek storitev opiše pred izvedbo. Če aplikacija med SQLPrepare in SQLExecute vpraša po stolpcih, gonilnik pridobi opis od storitve, ne da bi stavek izvedel. To stori samo, če storitev naslov za lastne stavke navede sama (Store.PassThrough); z naslovom iz PASSTHROUGH in pri stavku, ki ga SQL Server brez izvedbe ne more opisati (začasne tabele), gonilnik do izvedbe javi nič stolpcev.
  • Vrstico za vrstico pride samo prvi niz rezultatov. Vsak nadaljnji niz posredovanega stavka prispe s koncem prvega in ostane v pomnilniku, dokler ga aplikacija ne doseže s SQLMoreResults. Velik niz zato postavite na prvo mesto v proceduri.
  • DAO GetRows ob napaki pri nadaljnjem branju obvisi – s katerim koli gonilnikom; glejte Odpravljanje težav.
  • Posredovan stavek se prebere v celoti. Naslednjih strani ni: množico določa stavek sam, storitev pa jo omeji s svojo omejitvijo števila vrstic. Če ta omejitev učinkuje, gonilnik posreduje prejete vrstice in nato javi HY000 „Storitev je rezultat skrajšala po N vrsticah …“; Access to prikaže kot „ODBC–call failed“. Glejte Razvrščanje odgovorov.
  • Pojavijo se samo deli modela OData, ki jih je mogoče preslikati. Kompleksne vrednosti, zbirke, razmerja, singletoni, funkcije in podedovane lastnosti v katalogu manjkajo; glejte Kako iz storitve OData nastane relacijski model ODBC.
  • Vezana binarna vrednost se prenese kot besedilo. Na prepustni poti se poda kodirana v base64; če mora stavek primerjati binarno vrednost, jo zapišite neposredno v stavek.

Delovanje

  • Sledenje: za iskanje napak služita sledenje gonilnika in sledenje upravitelja gonilnikov; glejte Vklop sledenja. Sledenje ima datoteko odprto, dokler se proces izvaja, in vsako vrstico zapiše takoj.
  • Klic blokira nit aplikacije kot pri izvornem gonilniku, dokler odgovor ne prispe, in medtem ne obdeluje sporočil oken. Dogodki aplikacije, na primer „On Current“ podatkovnega lista v Accessu, zato se nikoli ne sprožijo sredi klica gonilnika.
  • Potrdila: prek https gonilnik potrdilo preveri v shrambah potrdil Windows, brez stikala za izklop; potrdilo, ki mu ni zaupano, povzroči 08S01, zahteva pa se ne ponovi. Glejte 08S01 "UntrustedRoot".
  • Spremembe sheme: gonilnik naloži $metadata enkrat na povezavo in ga hrani, dokler se povezava ne zapre. Če se shema storitve spremeni, medtem ko je aplikacija povezana:

    SpremembaPosledica do ponovne vzpostavitve
    dodan stolpec ali tabelani vidno
    stolpec odstranjen ali preimenovanzahtevo, ki ga navaja, storitev zavrne; aplikacija dobi sporočilo storitve
    pravica odvzetastoritev zavrne (403), tudi če je tabela še prikazana

    Ponovna vzpostavitev v Accessu pomeni: zaprite Access in ga znova odprite, nato v „Linked Table Manager“ posodobite zadevne povezane tabele; šele takrat Access nove stolpce in tipe prevzame v povezavo.

Odstopanja od ODBC Driver 18

Če aplikacijo z gonilnika ODBC za SQL Server (ODBC Driver 18) preselite na ta gonilnik, prepustna pot vrne enake vrednosti povsod, kjer oba gonilnika vrneta rezultat. Na naslednjih področjih se ta gonilnik vede drugače, tako v različici x86 kot x64:

PodročjeODBC Driver 18ta gonilnik
Izhodni parametri tipa decimal, numericz natančnostjo in merilom vezavekot decimal(38,10): več kot deset decimalnih mest se zaokroži
Izhodni parametri tipa datetimeoffsetz zamikombrez zamika
Izhodni parametri kot podatkovni tok (SQL_PARAM_OUTPUT_STREAM)podprtiHYC00
Števci spremenjenih vrstic med nizi rezultatov (brez SET NOCOUNT ON)vsak svoj rezultat za SQLMoreResultspreskočeni; SQLMoreResults skoči na naslednji niz s stolpci
Stolpci po SQLPrepare z naslovom iz PASSTHROUGHopisaninič stolpcev do izvedbe
varchar(max)SQL_VARCHAR z dolžino 0SQL_LONGVARCHAR z dolžino 2.147.483.647 (namerno, glejte Podatkovni tipi)
Stolpec brez imena ali s ponovljenim imenom v posredovani poizvedbiprazno oziroma ponovljeno imeime iz label; storitev brez label določi lastna imena (na primer Column2, Nummer1), glejte Zahteve za storitev OData
xml v posredovani poizvedbishranjeno besedilobesedilo, ki ga vrne storitev; podatkovni prehod Wkl.Data.Gateway prazen element zapiše kot <r /> namesto <r/> (isti dokument)
Polja deskriptorjev (SQLGetDescField, SQLSetDescField)vodenaHYC00

Sorodne teme

sl/wiki/data-conectivity/odata-odbc/reference/limits.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille