SQL Server’da Veritabanına Fotoğraf Ekleyip Çıkaran Prosedür
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.
Ş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.