Genellikle ASP.NET tarafında kullanılan bir işlem olmasına rağmen ben özellikle POS cihazına logo atmak için ihtiyaç duydum. Amacımız veritabanına dosyayı byte olarak okuyup yazdırabilmek. Netten baltığımda aslında bir kaç örnek buldum ama içlerinden bana göre en kısası ve rahat çalışanı bu idi. Öncelikle sizlere dosya okuma kodunu veriyorum;
public static Byte[] GetByteReadfromFile(string file)
{
if (File.Exists(file) == false)
{
return null;
}
try
{
byte[] image = File.ReadAllBytes(file);
return image;
}
catch (Exception ex)
{
return null;
}
}
Bu fonksiyon sadece tek başına dosyadan okuma yapıp sonucu bir byte dizisi halinde döndürmektedir. Esas veritabanına kayıt işlemine gelindiğinde ise klasik bir kod ile vede işin içine birde MS-Sql Store Procedure katarak okunan bu değerin nasıl veritabanına yazdırıldığını görelim.
Store Procedure içeriği ;
USE [AbmC]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spResimEkle]
@FPP_ID int,
@FPP_DATA varbinary(999),
@FPP_FILENAME varchar(150)
AS
BEGIN
INSERT INTO tblResimler(
FPP_DATA,
FPP_FILENAME
) VALUES (
@FPP_DATA,
@FPP_FILENAME
)
END
Şimdide C# tarafında klasik yöntemle nasıl veri gönderdiğimizi görelim.
public bool FtrParametreInsert(byte[] data, string fileName)
{
SqlCommand cmd = new SqlCommand();
bool dsOk = false;
try
{
cmd.Connection = OpenConnection();
if (Process == 2)
{
cmd.CommandText = "spResimEkle";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@FPP_DATA", SqlDbType.VarBinary, data.Length).Value = data;
cmd.Parameters.Add("@FPP_FILENAME", SqlDbType.VarChar).Value = fileName;
}
cmd.ExecuteNonQuery();
dsOk = true;
}
catch (SqlException ex)
{
WriteLog("HATA : FtrParametreInsert : " + Process.ToString() + " : " + ex.Message + " -> Query : " + cmd.CommandText);
}
finally
{
cmd = null;
CloseConnection();
}
return dsOk;
}