HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Adatok betöltése állományból


SQL Server adatmentés 2. rész

Példaprogram letöltése

10645 bájt

A cikksorozat ezt megelőző számában megismerhettük az MS SQL Server adatbázis beépített eszközét, melynek segítségével nagy tömegű adatot vagyunk képesek állományba menteni. Mostani cikkünkben bemutatjuk, hogyan importálhatjuk be az állományban található adatainkat egy létrehozott, új adattáblába a BCP.EXE segédprogrammal, valamint egy SQL utasítással.

A példához szükséges a FileDB adatbázis, melyet a mellékelt Run_script.cmd BATCH állomány lefuttatásával hozhatunk létre. Csak arra kell ügyelni, hogy a FileDB.sql parancsállomány a BATCH állománnyal azonos mappában legyen. A FileDB.sql parancsállomány 5. sorában adja meg helyesen a létrehozandó adatbázisfájlok mappájának nevét és elérési útvonalát.
A cikk mellékletét képező példaprogramban azokat az állományokat használjuk fel az adatok betöltésére, amelyeket a sorozat ezt megelőző számában generáltunk az egész táblás mentés folyamán. A program mappájában találjuk az adatokat tartalmazó publishers.dat állományt, valamint az adatok formátumát leíró publishers.fmt fájlt.
A feladat egyik részében a BCP.EXE alkalmazást használjuk fel az adatok betöltésére, a másik megoldásban pedig a BULK INSERT SQL utasítást.
A műveletek előtt meg kell adni annak a meghajtónak a betűjelét, ahová az MS SQL Server telepítve van. Erre egyrészt azért van szükség, hogy a programból indíthassuk el a segédprogramot, másrészt viszont, hogy megtaláljuk a betöltéshez felhasznált állományokat.
A feldolgozó ugyanis nem tudja értelmezni a könyvtárszerkezet mélyén található állományok elérési útvonalát, így nem használhatjuk az alkalmazás mappájának elérési útvonalát. Ezért úgy jártunk el, hogy a művelet indításakor a meghajtó gyökérmappájában létrehozunk egy /test nevű mappát, majd ide bemásoljuk a szükséges két állományt.
A bcp.exe felhasználásakor parancssori argumentumként adjuk át a szükséges paramétereket, akár csak az export műveletben. A műveletben a következő argumentumokkal futtatjuk le a segédprogramot:
bcp FileDB.dbo.Table1 in ’<meghajtó>:\test\publishers.dat’ –f ’ <meghajtó>:\test\publishers.fmt’
A parancssorban az IN kulcsszót használhatjuk az import művelet jelzésére. Az állományok neveit elérési útvonallal kell megadni. A formázó állomány nevét a –f kapcsoló után kell feltüntetni.
A másik megoldásban a BULK INSERT utasítást használjuk, melynek szabályos szintaxisa a következő:
BULK INSERT <[adatbázisnév].[tulajdonos].[táblanév]>
FROM <adatfájlnév>
WITH (...)
A FROM kulcsszó után adhatjuk meg a betöltendő adatállomány nevét aposztrófok közt. A WITH kulcsszó után adhatjuk meg az opcionálisan feltüntetendő, a betöltés módjára vonatkozó instrukciókat. Számtalan argumentumot használhatunk, lássunk néhányat:
  • DATAFILETYPE: megadhatunk egy értéket a lehetséges négyből, melyekkel meghatározhatjuk az adatállomány típusát. Értékei: char (az állomány karakteres adatokat tartalmaz), nativ (az adatbázis natív formátumában megadott adatokat tartalmaz), widechar (az állomány Unicode karaktereket tartalmaz), a widenativ (az állomány natív formátumú, de a TEXT, CHAR, VARCHAR oszlopok értékei Unicode karaktereket is tartalmaznak).
  • FIELDTERMINATOR: amennyiben nem használunk formázóállományt, itt adhatjuk meg, hogy az egyes mezők milyen karakterrel legyenek elválasztva. Ez csak char és widechar típusú állományok esetén használható.
  • FIRE_TRIGGERS: megadható, hogy a művelet alatt a táblához kapcsolódó INSERT TRIGGER-ek lefuthatnak.
  • FORMATFILE: itt adható meg a formázó állomány neve elérési útvonallal, aposztrófok közt.
  • ROWTERMINATOR: amennyiben nem használunk formázóállományt, itt adhatjuk meg, hogy az egyes rekordok milyen karakterrel legyenek elválasztva. Ez csak char és widechar típusú állományok esetén használható.
A műveletben a következő SQL utasítást helyeztük el a SqlCommand komponens CommandText property-jében:
BULK INSERT FileDB.dbo.Table1
FROM '<meghajtó>:\test\publishers.dat'
WITH
(
  FORMATFILE = ’ '<meghajtó>:\test\publishers.fmt’
)
A műveletek elvégzésekor egy szempontot kell figyelembe venni az adattáblákkal kapcsolatban. A táblának, melybe a betöltés megtörténik nem muszáj annak a táblának lenni, amiből az adatokat exportáltuk.
Azonban a beolvasás csak akkor lesz sikeres, ha a tábla annyi oszloppal rendelkezik, mint ahány adatoszlop az adatállományban fellelhető, és az oszlopok típusa megegyezik a betöltendő adatok megfelelő értékeinek típusával.
Ellenkező esetben a művelet hibaüzenettel leáll.

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 286. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |