HERKESE MERHABA!
Bugün sizlere C# ile Veri Tabanına nasıl Resim eklenir ve Kaydedilen veriler nasıl çekilir(kullanılır) onu göstericem işinize yarayacak kodlar aşağıdaki gibidir;
<div>
Baslik: <asp:TextBox ID="tb_YeniResimBaslik" runat="server" /><br />
Resim: <asp:FileUpload ID="fu_YeniResimDosya" runat="server" />
<asp:Button ID="bt_YeniResimKaydet" runat="server" Text="Yukle"
onclick="bt_YeniResimKaydet_Click" />
</div>
Baslik: <asp:TextBox ID="tb_YeniResimBaslik" runat="server" /><br />
Resim: <asp:FileUpload ID="fu_YeniResimDosya" runat="server" />
<asp:Button ID="bt_YeniResimKaydet" runat="server" Text="Yukle"
onclick="bt_YeniResimKaydet_Click" />
</div>
<asp:EntityDataSource ID="ds_Fotograflar" runat="server"
ConnectionString="name=vtEntities"
DefaultContainerName="vtEntities"
EnableFlattening="False"
EntitySetName="Fotograf"
Select="it.[id], it.[baslik], it.[resim], it.[tarih]" />
<asp:Repeater ID="rp_Fotograflar" runat="server"
DataSourceID="ds_Fotograflar"
OnItemCommand="rp_Fotograflar_Command">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<img src="Resim.ashx?id=<%# Eval("id") %>"
alt="<%# Eval("baslik") %>" width="200px" />
</td>
<td>
<%# Eval("baslik") %><br />
<%# Eval("tarih") %>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
ConnectionString="name=vtEntities"
DefaultContainerName="vtEntities"
EnableFlattening="False"
EntitySetName="Fotograf"
Select="it.[id], it.[baslik], it.[resim], it.[tarih]" />
<asp:Repeater ID="rp_Fotograflar" runat="server"
DataSourceID="ds_Fotograflar"
OnItemCommand="rp_Fotograflar_Command">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<img src="Resim.ashx?id=<%# Eval("id") %>"
alt="<%# Eval("baslik") %>" width="200px" />
</td>
<td>
<%# Eval("baslik") %><br />
<%# Eval("tarih") %>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
Yükle düğmesine tıklanıldığı anda kod tarafından resim dosyası ikili hale çevrilerek, Fotograf nesnesi oluşturlmuş ve veritabanına kaydedilmiştir. Resim dosyasını ikili hale çeviren ve veritabanına kaydeden metotlar aşağıdaki gibidir:
protected void bt_YeniResimKaydet_Click(object sender, EventArgs e)
{
vtEntities vtBaglanti = new vtEntities();
Fotograf yeniFotograf = new Fotograf
{
id = Guid.NewGuid(),
resim = ResimToByte(fu_YeniResimDosya.PostedFile.FileName),
baslik = tb_YeniResimBaslik.Text,
tarih = DateTime.Now
};
try
{
vtBaglanti.AddToFotograf(yeniFotograf);
vtBaglanti.SaveChanges();
}
catch (Exception)
{
throw new Exception("SQL Error");
}
finally
{
rp_Fotograflar.DataBind();
}
}
private byte[] ResimToByte(string resPatika)
{
FileInfo resBilgi = new FileInfo(resPatika);
FileStream dosAkim = new FileStream(resPatika, FileMode.Open, FileAccess.Read);
BinaryReader byteOkuyucu = new BinaryReader(dosAkim);
return byteOkuyucu.ReadBytes((int)resBilgi.Length);
}
{
vtEntities vtBaglanti = new vtEntities();
Fotograf yeniFotograf = new Fotograf
{
id = Guid.NewGuid(),
resim = ResimToByte(fu_YeniResimDosya.PostedFile.FileName),
baslik = tb_YeniResimBaslik.Text,
tarih = DateTime.Now
};
try
{
vtBaglanti.AddToFotograf(yeniFotograf);
vtBaglanti.SaveChanges();
}
catch (Exception)
{
throw new Exception("SQL Error");
}
finally
{
rp_Fotograflar.DataBind();
}
}
private byte[] ResimToByte(string resPatika)
{
FileInfo resBilgi = new FileInfo(resPatika);
FileStream dosAkim = new FileStream(resPatika, FileMode.Open, FileAccess.Read);
BinaryReader byteOkuyucu = new BinaryReader(dosAkim);
return byteOkuyucu.ReadBytes((int)resBilgi.Length);
}
public class Resim : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/jpeg";
vtEntities vtBaglanti = new vtEntities();
Guid fotografId = new Guid(context.Request.QueryString["id"]);
byte[] fotografResim = (from fotograf in vtBaglanti.Fotograf
where fotograf.id == fotografId
select fotograf.resim).FirstOrDefault();
Stream akim = new MemoryStream(fotografResim);
byte[] buffer = new byte[4096];
int byteSeq = akim.Read(buffer, 0, 4096);
while (byteSeq > 0)
{
context.Response.OutputStream.Write(buffer, 0, byteSeq);
byteSeq = akim.Read(buffer, 0, 4096);
}
}
public bool IsReusable
{
get { return false; }
}
}
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/jpeg";
vtEntities vtBaglanti = new vtEntities();
Guid fotografId = new Guid(context.Request.QueryString["id"]);
byte[] fotografResim = (from fotograf in vtBaglanti.Fotograf
where fotograf.id == fotografId
select fotograf.resim).FirstOrDefault();
Stream akim = new MemoryStream(fotografResim);
byte[] buffer = new byte[4096];
int byteSeq = akim.Read(buffer, 0, 4096);
while (byteSeq > 0)
{
context.Response.OutputStream.Write(buffer, 0, byteSeq);
byteSeq = akim.Read(buffer, 0, 4096);
}
}
public bool IsReusable
{
get { return false; }
}
}
KULLANACAĞINIZ KODLAR YUKARIDADIR.
Kaynak: http://bidb.itu.edu.tr/eskiler/seyirdefteri/blog/2013/09/06/c-ile-veritaban%C4%B1na-resim-ekleme-ve-kaydedilen-verileri-%C3%A7ekme

Yorumlar
Yorum Gönder