Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Az SQL-utasítások paramétereihez hasonlóan hosszú adatok küldhetők el a sorok SQLBulkOperations vagy SQLSetPos használatával történő frissítésekor, illetve sorok SQLBulkOperations használatával történő beszúrásakor. Az adatok részekben lesznek elküldve, több hívással az SQLPutData felé. Azokat az oszlopokat, amelyekre a végrehajtáskor adatokat küldenek, adatvégrehajtási oszlopoknak nevezzük.
Megjegyzés:
Az alkalmazások bármilyen típusú adatot küldhetnek a végrehajtás során az SQLPutData használatával, bár csak karakter- és bináris adatok küldhetők részekben. Ha azonban az adatok elég kicsik ahhoz, hogy egyetlen pufferben elférjenek, általában nincs ok az SQLPutData használatára. Sokkal egyszerűbb a puffer kötése, és lehetővé tenni, hogy az illesztőprogram lekérje az adatokat a pufferből.
Mivel a hosszú adatoszlopok általában nem kötöttek, az alkalmazásnak az SQLBulkOperations vagy az SQLSetPos hívása előtt meg kell kötnie az oszlopot, és az SQLBulkOperations vagy az SQLSetPos hívása után le kell kapcsolnia az oszlopot. Az oszlopnak kötöttnek kell lennie, mert az SQLBulkOperations vagy az SQLSetPos csak kötött oszlopokon működik, és kötetlennek kell lennie ahhoz, hogy az SQLGetData használatával adatokat lehessen lekérni az oszlopból.
Ha végrehajtási időben szeretne adatokat küldeni, az alkalmazás a következőket teszi:
Adatérték helyett 32 bites értéket helyez el a sorhalmaz pufferében. Ezt az értéket később a rendszer visszaadja az alkalmazásnak, ezért az alkalmazásnak értelmes értékre kell állítania, például az adatokat tartalmazó fájl oszlopának vagy leírójának számát.
A hossz-/mutatópuffer értékét a SQL_LEN_DATA_AT_EXEC(hossz) makró eredményére állítja. Ez az érték azt jelzi az illesztőprogramnak, hogy a paraméter adatait az SQLPutData küldi el. A hosszértéket akkor használja a rendszer, ha hosszú adatokat küld egy adatforrásnak, és tudnia kell, hogy hány bájtnyi hosszú adatot küld el, hogy az előre el tudja helyezni a helyet. Annak megállapításához, hogy egy adatforrásnak szüksége van-e erre az értékre, az alkalmazás meghívja az SQLGetInfo-t a SQL_NEED_LONG_DATA_LEN beállítással. Minden illesztőprogramnak támogatnia kell ezt a makrót; ha az adatforráshoz nem szükséges a bájthossz, az illesztőprogram figyelmen kívül hagyhatja.
SQLBulkOperations vagy SQLSetPos hívása. Az illesztő felderíti, hogy egy hossz/mutató puffer tartalmazza a SQL_LEN_DATA_AT_EXEC(hossz) makró eredményét, és a függvény visszatérési értékeként SQL_NEED_DATA ad vissza.
Meghívja az SQLParamData-t a SQL_NEED_DATA visszatérési értékre válaszul. Ha hosszú adatokat kell elküldeni, az SQLParamData SQL_NEED_DATA ad vissza. A ValuePtrPtr argumentum által mutatott pufferben az illesztő azt az egyedi értéket adja vissza, amelyet az alkalmazás a sorhalmaz pufferébe helyezett. Ha egynél több adatvégrehajtási oszlop van, az alkalmazás ezt az értéket használja annak meghatározására, hogy melyik oszlopnak szeretne adatokat küldeni; az illesztőnek nem kell adatokat kérnie a végrehajtáskor lévő adatoszlopokhoz egyetlen adott sorrendben sem.
Meghívja az SQLPutData-t , hogy küldje el az oszlopadatokat az illesztőprogramnak. Ha az oszlopadatok nem férnek el egyetlen pufferben, ahogy a hosszú adatok esetében is gyakran előfordul, az alkalmazás ismételten meghívja az SQLPutData-t , hogy részekben küldje el az adatokat; az illesztőprogramon és az adatforráson múlik az adatok újraértékelése. Ha az alkalmazás null-terminált sztring adatot ad át, az illesztőprogramnak vagy az adatforrásnak el kell távolítania a null-terminálási karaktert az összeszerelési folyamat részeként.
Ismét meghívja az SQLParamData-t , hogy jelezze, hogy elküldte az oszlop összes adatát. Ha vannak olyan adatvégrehajtási oszlopok, amelyekhez nem lettek elküldve adatok, az illesztő visszaadja a SQL_NEED_DATA és a következő adatvégrehajtási oszlop egyedi értékét; az alkalmazás visszatér az 5. lépéshez. Ha az összes adatvégrehajtási oszlophoz adatokat küldtek, a rendszer elküldi a sor adatait az adatforrásnak. Az SQLParamData ezután SQL_SUCCESS vagy SQL_SUCCESS_WITH_INFO ad vissza, és bármilyen SQLSTATE-t visszaad, amelyet az SQLBulkOperations vagy az SQLSetPos vissza tud állítani.
Miután az SQLBulkOperations vagy az SQLSetPos visszaadja az SQL_NEED_DATA értéket, és mielőtt az adatok a végrehajtás alatti adat utolsó oszlopához lettek teljesen elküldve, az utasítás adatszükségleti állapotban van. Ebben az állapotban az alkalmazás csak SQLPutData, SQLParamData, SQLCancel, SQLGetDiagField vagy SQLGetDiagRec hívására képes; minden más függvény az SQLSTATE HY010-et adja vissza (függvényütemezési hiba). Az SQLCancel meghívása megszakítja az utasítás végrehajtását, és visszaadja az előző állapotba. További információkért lásd a B függeléket: ODBC állapotátmenet táblázatok.