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.