Herkese merhaba,

Bu yazıda SQL Server’da veritabanına fotoğraf ekleyip çıkaran prosedür hakkında bilgi vereceğim.

SQL Server’da bazı durumlarda veritabanına fotoğraf ekleyip, sonrasında bu fotoğrafları başka bir klasöre ya da dosyaya T-SQL komutları ile çıkarmak isteyebiliriz.

İlk olarak aşağıdaki kodları çalıştırıp gerekli ayarlamaları yapmalısınız.

EXEC sp_configure 'show advanced options', 1; 
RECONFIGURE; 
EXEC sp_configure 'Ole Automation Procedures', 1; 
RECONFIGURE;

Şimdi tablomuzu oluşturalım.

--Fotoğraf tutacağımız tabloyu oluşturuyoruz.

CREATE TABLE Fotograflar
(
    FotoAd NVARCHAR(40) PRIMARY KEY NOT NULL,
    FotoDosyaAd NVARCHAR(100),
    FotoData VARBINARY(MAX)
);

Şu anda tablomuzun içi boş. Tablomuzun içine fotoğraf eklemek için bir prosedür oluşturuyoruz. Kodları aşağıda görmektesiniz.

--Veritabanına Fotoğraf Ekleyen Prosedür 
CREATE PROCEDURE VeritabaninaFotoEkle
(
    @FotoAd NVARCHAR(100),
    @FotoDosyaYolu NVARCHAR(1000),
    @DosyaAd NVARCHAR(1000)
)
AS
BEGIN
    DECLARE @DisDosyaYolu NVARCHAR(2000);
    DECLARE @Sql NVARCHAR(2000);
    SET NOCOUNT ON;
    SET @DisDosyaYolu = CONCAT(@FotoDosyaYolu, '\', @DosyaAd);
    SET @Sql
        = N'INSERT INTO Fotograflar (FotoAd, FotoDosyaAd, FotoData) ' + N' SELECT ' + N'''' + @FotoAd + N'''' + N','
          + N'''' + @DosyaAd + N'''' + N', * ' + N'FROM Openrowset( BULK ' + N'''' + @DisDosyaYolu + N''''
          + N', Single_Blob) as Fotograf';
    EXEC (@Sql);
    SET NOCOUNT OFF;
END;

Prosedürümüzü çalıştırıyoruz ve prosedür başarılı şekilde oluşturuldu. Şimdi fotoğrafı çıkaran prosedürün kodlarını çalıştıralım. Aşağıda kodları görmektesiniz.

--Veritabanından Fotoğraf Çıkaran Prosedür 

CREATE PROCEDURE VeritabanindanFotografCikar
(
    @FotoAd NVARCHAR(100),
    @FotoDosyaYolu NVARCHAR(1000),
    @DosyaAd NVARCHAR(1000)
)
AS
BEGIN
    DECLARE @FotoData VARBINARY(MAX);
    DECLARE @DisDosyaYolu NVARCHAR(2000);
    DECLARE @Nesne INT;
    SET NOCOUNT ON;
    SELECT @FotoData =
    (
        SELECT CONVERT(VARBINARY(MAX), FotoData, 1)
        FROM dbo.Fotograflar
        WHERE FotoAd = @FotoAd
    );
    SET @DisDosyaYolu = CONCAT(@FotoDosyaYolu, '\', @DosyaAd);
    BEGIN TRY
        EXEC sp_OACreate 'ADODB.Stream', @Nesne OUTPUT;
        EXEC sp_OASetProperty @Nesne, 'Type', 1;
        EXEC sp_OAMethod @Nesne, 'Open';
        EXEC sp_OAMethod @Nesne, 'Write', NULL, @FotoData;
        EXEC sp_OAMethod @Nesne, 'SaveToFile', NULL, @DisDosyaYolu, 2;
        EXEC sp_OAMethod @Nesne, 'Close';
        EXEC sp_OADestroy @Nesne;
    END TRY
    BEGIN CATCH
        EXEC sp_OADestroy @Nesne;
    END CATCH;
    SET NOCOUNT OFF;
END;

İkinci prosedür de başarılı şekilde oluştu ise şimdi tablomuzun içine bilgisayarımızdaki bir fotoğrafı ekleyelim. Bu işlem için biraz önce oluşturduğumuz prosedürü kullanıyoruz.

Ben D klasörü içine herhangi bir fotoğraf ekledim. Siz istediğiniz fotoğrafı kullanabilirsiniz.

Not : Windows’un yüklü olduğu sürücüde bu işlemi yaptığınız zaman hata alabilirsiniz.

Fotoğraf ekleme prosedürü aşağıdadır.

--Fotoğrafın prosedür ile veritabanına eklenmesi (Windows'un yüklü olduğu sürücüde hata vermekte. Bu yüzden farklı bir sürücü üzerinde işlemi yapın.) 

EXEC dbo.VeritabaninaFotoEkle 'Dragon', 'D:\', 'Foto.png';

İşlem başarılı bir şekilde çalıştı ise aşağıdaki sonucu göreceksiniz.

SQL Server’da Veritabanına Fotoğraf Ekleyip Çıkaran Prosedür

Şimdi fotoğrafı D sürücüsü içerisinden siliyorum ve oluşturmuş olduğum prosedür ile veritabanından geri getirmek istiyorum. Fotoğraf çıkarma prosedürü aşağıdadır.

--Fotoğrafın prosedür ile veritabanından çıkarılması (Windows'un yüklü olduğu sürücüde hata vermekte. Bu yüzden farklı bir sürücü üzerinde işlemi yapın.) 

EXEC dbo.VeritabanindanFotografCikar 'Dragon', 'D:\', 'Dragon.png';

Kodu çalıştırdığınız zaman D sürücüsüne fotoğrafın geri geldiğini göreceksiniz.

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

561 Kez Okundu

Kategoriler: