ASP.NET MS Access Resim/Image Upload & List
Merhaba,
ASP.NET tarafinda gerekli olabileceğini düşündüğüm bir yazıya başlamak üzereyiz,malumunuz genelde yazılarımda .NET taraflarini koyduğum gibi aynı zamanda hayattan da bir takim şeyleri paylaşiyorum
Son doğum gününden bu yana, hayat idare eder derecede geçmekle birlikte , uğraşicak çok şeyin olduğunu hergün hergün anlamak gerçekten kötü.
Herkese bu konuda tavsiyem , ne kadar az bilirseniz , aslinda o kadar mutlu olabiliyorsunuz,fazlasina gerek yok mantiği ile devam…
6 ayda bir görebildiğim bir arkadaş grubum var, ama normal karşılamak lazim , sonuçta herkes kendi seçimlerini yaşar..
Gelelim örneğimize, örnek biraz aslinda senaryolandirilmiş ve nesne yönelimli programlama teknikleri kullanilarak geliştirilmiştir,uygulamanin herkese fikirler verebileceği çok açıktır,SQL Server üzerinde bulunan bir tabloya binary veri formatinda resim saklanmasini işlevini aslinda web üzerinde birçok noktada bulabilirsiniz , fakat bende biraz farkli olsun diye bu işi bir MS Access veritabanina yaptırmaya karar verdim , biraz da işin içine eklenen resimlerin listelenmesi girince , güzel olduğuna inandığım bir örnek ortaya çıktı.
NOT : bu bir makale değildir,makale yazmak bilimsel değer gerektirir,yaptiklarimiz sadece incelemedir,keyfimize bakalim.
Öncelikle bir ASP.NET web site açiyoruz , localhost üzerinde.bu Web site içerisinde tasarim olarak aşağıda görebileceğiniz örnek sayfayı üretiyoruz.
Sayfa içerisinde fazla kontrol bulunmamaktadir , fakat resimlerin listelenmesi konusunda GenericHandler ve dinamik kontrol oluşturmadan yararlaniliyor,
Hemen bu noktada belirteyim , eger ki HttpHandler kullanimina yabancı durumda isek , sizlere tavsiyem web üzerinde türkçe olarak HttpHandler konulu makaleler bulunmaktadir,bunlardan yararlanmanizi tavsiye ederim

Sayfa içerisinde bulunan kontrollerin ID değerleri değiştirilmiştir,bu değiştirmeleri kodlara bakinca anlayabilirsiniz.
Yaptiğimiz bir kaç işlemden bahsetmek istiyorum , ve arkasindan kodlari paylaşacağım.
Web site içerisinde App_Code klasörü ekleyerek kod dosyalarini burada saklamayi uygun gördüm ve bizim için işlerimizi götüren ve nesne yönelimli tekniğin kücük bir örneği olarak kabul edebileceğimiz Manage Class’ını ( sınıfını ) ekliyoruz.


Diğer bir noktada tasarimini birazdan anlatacağim , MS Access veritabanimizi App_Data klasörü içerisinde sakliyoruz.

Gelelim MS Access tasarimina , bir .MDB uzantili MS Access veritabani dosyası oluşturunuz ve üzerinde bir tablo yaratalim
Bu tablo ismi tblImages olabilir bizim resimlerimiz için , ve tblImages tablosu şema olarak ImageID => otomatik sayı veri formatinda , myImage => Ole Nesnesi veri formatinda kolonlar içersin.
Veritabani üzerinde ASP.NET tarafindan işlemler koşturacağımız için yazma izinlerini vermemiz gerekir
bu iş için Windows işletim sisteminizin Command Prompt’unu çalıştıralim
Başlat > Çalıştır
cmd Yazalim < Enter
yazacağımız kod veritabaninin fiziksel yoluna göre aşağıdaki gibi olmalidir

yukaridaki işlemi tamamladiysak , sıra geldi bu veritabanimiza bağlanacağımız sırada kullanacağımız bağlantı cümlesini projeye anlatmaya
bu iş için web.config içerisinde bulunan ConnectionStrings boğumunu kullanabiliriz
ve aşağıdaki kodlari Configuration boğumu altinda herhangi bir noktada açarak yazalim
<connectionStrings>
<add name=”AccessConnection”
connectionString=”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\inetpub\wwwroot\MSAccessResimUpload\App_Data\ImageDB.mdb”/>
</connectionStrings>
belirttiğim fiziksel yol , benim kendi projemde kullandığım veritabaninin fiziksel yolunu içermektedir.
App_Code klasörü içerisine yazdığımız ‘Manage’ isimli Class’in C# Kodlari :
-
using System;
-
-
using System.Data;
-
-
using System.Configuration;
-
-
using System.Web.UI;
-
-
using System.Web.UI.WebControls;
-
-
using System.Data.OleDb;
-
-
/// <summary>
-
-
/// Resim Upload Orneginin Yonetim Sınıfı
-
-
/// </summary>
-
-
public class Manage
-
-
{
-
-
OleDbConnection connection { get; set; }
-
-
OleDbCommand cmdInsert { get; set; }
-
-
OleDbCommand cmdSelect { get; set; }
-
-
Action<Page> myHandler { get; set; }
-
-
public Manage()
-
-
{
-
-
string strConnectionString = ConfigurationManager.ConnectionStrings["AccessConnection"].ConnectionString;
-
-
-
connection.ConnectionString = strConnectionString;
-
-
-
cmdInsert.Connection = connection;
-
-
-
cmdSelect.Connection = connection;
-
-
-
}
-
-
public int InsertImage(byte[] image)
-
-
{
-
-
cmdInsert.CommandText = "insert into tblImages (myImage) values (@img)";
-
-
cmdInsert.Parameters.Add("@img", OleDbType.VarBinary);
-
-
cmdInsert.Parameters["@img"].Value = image;
-
-
connection.Open();
-
-
int affectedRow = cmdInsert.ExecuteNonQuery();
-
-
connection.Close();
-
-
return affectedRow;
-
-
}
-
-
public void ListImages(Page p)
-
-
{
-
-
PlaceHolder myHolder = (PlaceHolder)p.FindControl("myHolder");
-
-
cmdSelect.CommandText = "select ImageID from tblImages order by ImageID DESC";
-
-
connection.Open();
-
-
OleDbDataReader dr = cmdSelect.ExecuteReader();
-
-
while (dr.Read())
-
-
{
-
-
-
img.ImageUrl = "ImageHandler.ashx?ImageID=" + dr.GetInt32(0).ToString();
-
-
-
lbl.Text = string.Format("<br>——————{0}——————<br>",dr.GetInt32(0));
-
-
myHolder.Controls.Add(lbl);
-
-
myHolder.Controls.Add(img);
-
-
myHolder.Controls.Add(lbl);
-
-
}
-
-
dr.Close();
-
-
connection.Close();
-
-
}
-
-
void ConnectionControl()
-
-
{
-
-
if (connection.State == ConnectionState.Closed)
-
-
connection.Open();
-
-
else
-
-
connection.Close();
-
-
}
-
-
public void GetList(Page p)
-
-
{
-
-
myHandler.Invoke(p);
-
-
}
-
-
}
Default.aspx sayfamizin tasarim kodlari :
<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”Default.aspx.cs” Inherits=”_Default” %>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head runat=”server”>
<title>MS Access Resim Upload – creacoder.COM</title>
<style type=”text/css”>
.style1 {
width: 400px;
border:1px solid;
border-color:Black;
}
.style2
{
width: 600px;
}
</style>
</head>
<body>
<form id=”form1″ runat=”server”>
<div>
<table align=”center” cellpadding=”0″ cellspacing=”0″ class=”style1″>
<tr>
<td>
<br />
Resim Yükle :<br />
<br />
<asp:FileUpload ID=”myUploader” runat=”server” />
<br />
<asp:LinkButton ID=”lnkImageLoad” runat=”server”
onclick=”lnkImageLoad_Click”>Resim Yukle</asp:LinkButton><br />
Resim Yükleyin ve Resimleriniz Listelensin…<br />
</td>
</tr>
</table>
<br />
<table align=”center” cellpadding=”0″ cellspacing=”0″ class=”style2″>
<tr>
<td>
<asp:PlaceHolder ID=”myHolder” runat=”server”></asp:PlaceHolder>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Default.aspx sayfamizin arka plandaki C# Kodlari :
-
using System;
-
-
public partial class _Default : System.Web.UI.Page
-
-
{
-
-
Manage manager;
-
-
protected void Page_Load(object sender, EventArgs e)
-
-
{
-
-
-
myHolder.Controls.Clear();
-
-
}
-
-
protected void lnkImageLoad_Click(object sender, EventArgs e)
-
-
{
-
-
if (myUploader.HasFile)
-
-
{
-
-
byte[] image = myUploader.FileBytes;
-
-
int affected = manager.InsertImage(image);
-
-
this.Title = affected > 0 ? "Upload OK" : "Upload NOT OK";
-
-
manager.GetList(this);
-
-
}
-
-
}
-
-
}
Son olarak da yükleme işlemi yaptiktan sonraki görüntüye göz atalim…

Leave a Reply
You must be logged in to post a comment.