Zápis obrázků do databáze

PříspěvekNapsal: 10.01.2007 16:58
od jan.novotny
Obrázek je uložen v databázi (např. ve sloupci TabKmenZbozi.Obrazek) tak, jako soubor na disku (tedy není nijak překonvertováván).

Ukládat obrázky do databáze (hromadně) lze pomocí utility textcopy.exe. Skriptem principielně takto:

DECLARE @ID INT,@e VARCHAR(8000)

SET @e='C:\Cesta\Obrazek.bmp'
SET @ID=123

UPDATE TabKmenZbozi SET Obrazek=0x WHERE ID=@ID

SET @e='textcopy.exe /S /U /P /D '+DB_NAME()+' /T TabKmenZbozi /C Obrazek /W "WHERE ID='+CAST(@ID AS VARCHAR)+'" /F "'+@e+'" /I'

EXEC master.dbo.xp_cmdshell @e

Doplněk - Zápis obrázků do databáze

PříspěvekNapsal: 06.02.2007 11:36
od jiri.dolezal
Je třeba zdůraznit, aby se nezapomělo na:

Kód: Vybrat vše
UPDATE {něco} SET Obrazek=0x WHERE ID=@ID


nebo

Kód: Vybrat vše
INSERT INTO {něco}(ID,Obrazek) VALUES(@ID,0x)


Proč je to nutno udělat? Protože když je v buňce hodnota NULL skončí provádění příkazu TEXTCOPY chybou (ERROR: Text or image pointer and timestamp retrieval failed.).

Dále doporučuji mít v proceduře nějakou kontrolu na chybovost. A dopadne li provádění xp_cmdshell chybou, vrátit hodnotu Obrzaku zpět na NULL. Něco jako:

Kód: Vybrat vše
SET @e='textcopy.exe /S /Uheliosext /P /D '+DB_NAME()+' /T TabKmenZbozi /C Obrazek /W \"WHERE ID='+CAST(@ID AS VARCHAR)+'\" /F @Cesta+'\" /I'
 EXEC @Error = master.dbo.xp_cmdshell @e
 IF @Error <> 0
   UPDATE {něco} SET Obrazek=NULL WHERE ID=@ID