Ms Access ile ilgili geçmiş yazılarım arasında biraz vakit geçirmişseniz, Ms Access form uygulamaları yada veritabanı olarak kullanmayı sevdiğimi anlamışsınızdır. Birazdan size anlatmaya çalışacağım konu Ms Access veritabanı olarak kullandığımız bir Asp.Net Web projesinde resimleri ve dosyaları paket halinde veritabanının içine gömmek olacak.Neden bilmiyorum bu konuda Türkçe kaynak yok, merak etmeyin bu yazı size iyi gelecek...
Yazıya başlamadan Ms Acces 2007 sürümünün ilk yazısı olan Asp.Net Veri Kayıt konulu blogu okumanızı öneririm.Ole Object konusuna başlamadan bu blog size ilk fikirleri verebilecek türdendir.İlgilendiğiniz sadece Ole Nesneleri kaydı ise devam edebilirsiniz.
Önce örnek bir senaryo yazalım : Web sitemize gelen kullanıcılar resimlerini (jpg-gif-png-bmp) yada ofis belgelerini (xls-docx-pdf vb) dosyalarını yüklemek istiyorlar.Belirlediğimiz Upload için dizinde bir klasör bulundurmadan sıkıştırarak Ms Access veritabanımıza kaydetmeyi öngörüyoruz.Bahsettiğim uygulama veritabanına dizin yolunu kaydetme değildir (path)
Yukarıdaki küçük senaryodan daha fazlasıda yapılabilir mesela ben buna benzer bir işlemi, web üzerinden ürün resimlerini, özelliklerini ve fiyat bilgilerini yayınlayan bir web sitesi için yapmıştım.
Geliştirme şu özelliklere sahip olacak
Ms Access 2007 (OLEDB)
Visual Basic.Net (isterseniz csharp çevirebilirsiniz)
Ms Accessteki OLE Nesnesini(OLE Object) yani Object Linking and Embedding veri türünü kullacağız paket veri olarak adlandırdığımız bu uygulamada Ms Access in sağladığı 1 GB kapasite oldukça yeterli bir alan demek...
Ms Access Table/Field içeriği şunlar olacak
OLEDB.accdb veritabanı ismi
OLETABLE tablo ismi
OleId :Otomatik sayı
OleText: Metin
OleType: Metin
OleStream: Ole nesnesi
Web Uygulaması içeriği şunlar olacak
2 sayfamız olacak vb.net
1- OleSave.aspx (bu sayfada upload aracımız olacak)
2- OleDisplay.aspx (veritabanına eklediğimiz paketleri izleyeceğimiz sayfa olacak)
1- OleSave.aspx.vb içeriğimiz
Imports System.Data
Imports System.Data.OleDb
Imports System,OI
(kopyalamak ve geniş izlemek için (view plain) tıklayın
OleSave.aspx için bilmeniz gerekenler
1-FileUpload eklemelisiniz (Paketi yükleme esnasında seçmek için)
2-OleText adında TextBox eklemelisiniz (açıklama yazmak için kullanmanız için)
3-Button eklemelisiniz (click)
Element ID leriniz cmd.Parameters dizisinde gördüğünüz gibi olmalı dilerseniz değiştirebilirsiniz.
Sayfanın doğru işlemi sonucunda Response.Redirect("OleSave.aspx") yönlenecek değiştirebilirsiniz.
Paketinizi görünümü izlemeni Ole_id Url olarak hazırlanmış olacağından herhangi bir Data tool da bu Id String inin kullanacaksınız demektir bununla ilgili bilgi OleDisplay.aspx.vb kodlarında bulabilirsiniz.
2-OleDisplay.aspx.vb içeriğimiz
Partial Class OleDisplay
Code behind kısmında yapacağınız değişiklik yoktur sayfanın genel amacı veritabanına eklenmiş nesneleri ole_id üzerinden izleyiciye sunmaktır.Fakaat çok önemli bir ayrıntıyı anlatmak için kod bloğuna eklemediğim bir şey var.OleDisplay.aspx içinde bir GridView yada DetailView aracı kullancığınızda myAdapter datasetinin altında şunu kullanmalısınız
örneğin: myAdpter.Fill(myDataSset)
DetailsView1.DataBind()
Tüm işlemleri bitirip bir resim yada bir belgeyi yüklediğinizde belgenin uzun ikili veri Int64 tipinde Ms Access veritabanına yüklendiğinizi göreceksiniz.Bu belgeleri kullanıcılara göstermek için OleDisplay.aspx sayfasına bağımlı değilsiniz.
Örneğin projenizin değişik yerlerinde ihtiyacınız olan bir resim için...
ImageUrl='' OleURL(DataBinder.Eval(Container.DataItem, "OleId"))
şeklinde bunu çok hızlı ve pratik bir şekilde yapabilirsiniz....
Evet bu blogta bu kadar Ms Access ile sınırları zorlamak münkün, elbette Asp.Net ilede gayet uyumlu olan 2007 sürümünüi ilerşeyen bloglarda diğer notlarımıda yayınlayacağım bu haliyle uzun soluklu bir blog...
Yazıya başlamadan Ms Acces 2007 sürümünün ilk yazısı olan Asp.Net Veri Kayıt konulu blogu okumanızı öneririm.Ole Object konusuna başlamadan bu blog size ilk fikirleri verebilecek türdendir.İlgilendiğiniz sadece Ole Nesneleri kaydı ise devam edebilirsiniz.
Önce örnek bir senaryo yazalım : Web sitemize gelen kullanıcılar resimlerini (jpg-gif-png-bmp) yada ofis belgelerini (xls-docx-pdf vb) dosyalarını yüklemek istiyorlar.Belirlediğimiz Upload için dizinde bir klasör bulundurmadan sıkıştırarak Ms Access veritabanımıza kaydetmeyi öngörüyoruz.Bahsettiğim uygulama veritabanına dizin yolunu kaydetme değildir (path)
Yukarıdaki küçük senaryodan daha fazlasıda yapılabilir mesela ben buna benzer bir işlemi, web üzerinden ürün resimlerini, özelliklerini ve fiyat bilgilerini yayınlayan bir web sitesi için yapmıştım.
Geliştirme şu özelliklere sahip olacak
Ms Access 2007 (OLEDB)
Visual Basic.Net (isterseniz csharp çevirebilirsiniz)
Ms Accessteki OLE Nesnesini(OLE Object) yani Object Linking and Embedding veri türünü kullacağız paket veri olarak adlandırdığımız bu uygulamada Ms Access in sağladığı 1 GB kapasite oldukça yeterli bir alan demek...
Ms Access Table/Field içeriği şunlar olacak
OLEDB.accdb veritabanı ismi
OLETABLE tablo ismi
OleId :Otomatik sayı
OleText: Metin
OleType: Metin
OleStream: Ole nesnesi
Web Uygulaması içeriği şunlar olacak
2 sayfamız olacak vb.net
1- OleSave.aspx (bu sayfada upload aracımız olacak)
2- OleDisplay.aspx (veritabanına eklediğimiz paketleri izleyeceğimiz sayfa olacak)
1- OleSave.aspx.vb içeriğimiz
Imports System.Data
Imports System.Data.OleDb
Imports System,OI
(kopyalamak ve geniş izlemek için (view plain) tıklayın
Partial Class OleSave Inherits System.Web.UI.Page Dim connStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Server.MapPath("App_Data/OLEDB.accdb") Dim myAccessConnection As New OleDbConnection(connStr) Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not IsPostBack Then displayImages() End If End Sub Public Sub openAccessConnection() If myAccessConnection.State = ConnectionState.Closed Then myAccessConnection.Open() End If End Sub Public Sub closeAccessConnection() If myAccessConnection.State = ConnectionState.Open Then myAccessConnection.Close() End If End Sub Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Try openAccessConnection() Dim OleSize As Int64 Dim OleType As String Dim OleStream As Stream OleSize = fileUpload.PostedFile.ContentLength OleType = fileUpload.PostedFile.ContentType OleStream = fileUpload.PostedFile.InputStream Dim imageContent(OleSize) As Byte Dim intStatus As Integer intStatus = OleStream.Read(OleContent, 0, OleSize) Dim cmd As New OleDbCommand("insert into OLETABLE(Oleİd,OleText,OleType,OleStream) values(@OleId, @OleText,@OleType,@OleStream)", myAccessConnection) cmd.CommandType = CommandType.Text cmd.Parameters.Add("@OleText", OleDbType.VarChar).Value = OleText.Text cmd.Parameters.Add("@OleType", OleDbType.VarChar).Value = OleType.Text cmd.Parameters.Add("OleStream", OleDbType.Binary).Value = OleContent cmd.ExecuteNonQuery() closeAccessConnection() Catch ex As Exception Response.Write(ex.Message) closeAccessConnection() End Try Response.Redirect("OleSave.aspx") End Sub Public Function OleURL(ByVal Ole_id) As String Return ("OleDisplay.aspx?id=" & Ole_id) End Function End ClassYukarıdaki kodları OleSave.aspx.vb içeriğidir burda bilmeniz gereken bu kod bloğunun çalıştırması için şunları sayfaya eklemelisiniz.
OleSave.aspx için bilmeniz gerekenler
1-FileUpload eklemelisiniz (Paketi yükleme esnasında seçmek için)
2-OleText adında TextBox eklemelisiniz (açıklama yazmak için kullanmanız için)
3-Button eklemelisiniz (click)
Element ID leriniz cmd.Parameters dizisinde gördüğünüz gibi olmalı dilerseniz değiştirebilirsiniz.
Sayfanın doğru işlemi sonucunda Response.Redirect("OleSave.aspx") yönlenecek değiştirebilirsiniz.
Paketinizi görünümü izlemeni Ole_id Url olarak hazırlanmış olacağından herhangi bir Data tool da bu Id String inin kullanacaksınız demektir bununla ilgili bilgi OleDisplay.aspx.vb kodlarında bulabilirsiniz.
2-OleDisplay.aspx.vb içeriğimiz
Partial Class OleDisplay
Inherits System.Web.UI.Page Dim connStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Server.MapPath("App_Data/OLEDB.accdb") Dim myAccessConnection As New OleDbConnection(connStr) Public Sub openAccessConnection() If myAccessConnection.State = ConnectionState.Closed Then myAccessConnection.Open() End If End Sub Public Sub closeAccessConnection() If myAccessConnection.State = ConnectionState.Open Then myAccessConnection.Close() End If End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Try Dim ID As String = Request.QueryString("id") myAccessConnection.Open() Dim cmd As New OleDbCommand("select * from OLETABLE where Ole_id=@Ole_id", myAccessConnection) cmd.CommandType = CommandType.Text Dim Ole_id As New OleDbParameter("@Ole_id", SqlDbType.Int) Ole_id.Value = ID cmd.Parameters.Add(Ole_id) Dim myAdapter As New OleDbDataAdapter(cmd) Dim myDataSet As New DataSet myAdapter.Fill(myDataSet) For Each dRow As DataRow In myDataSet.Tables(0).Rows Response.ContentType = dRow("OleType") Response.BinaryWrite(dRow("OleStream")) Next myAccessConnection.Close() Catch exc As Exception End Try End Sub End ClassOleDisplay.aspx için bilmeniz gerekenler
Code behind kısmında yapacağınız değişiklik yoktur sayfanın genel amacı veritabanına eklenmiş nesneleri ole_id üzerinden izleyiciye sunmaktır.Fakaat çok önemli bir ayrıntıyı anlatmak için kod bloğuna eklemediğim bir şey var.OleDisplay.aspx içinde bir GridView yada DetailView aracı kullancığınızda myAdapter datasetinin altında şunu kullanmalısınız
örneğin: myAdpter.Fill(myDataSset)
DetailsView1.DataBind()
Tüm işlemleri bitirip bir resim yada bir belgeyi yüklediğinizde belgenin uzun ikili veri Int64 tipinde Ms Access veritabanına yüklendiğinizi göreceksiniz.Bu belgeleri kullanıcılara göstermek için OleDisplay.aspx sayfasına bağımlı değilsiniz.
Örneğin projenizin değişik yerlerinde ihtiyacınız olan bir resim için...
ImageUrl='' OleURL(DataBinder.Eval(Container.DataItem, "OleId"))
şeklinde bunu çok hızlı ve pratik bir şekilde yapabilirsiniz....
Evet bu blogta bu kadar Ms Access ile sınırları zorlamak münkün, elbette Asp.Net ilede gayet uyumlu olan 2007 sürümünüi ilerşeyen bloglarda diğer notlarımıda yayınlayacağım bu haliyle uzun soluklu bir blog...
Sponsorlu Bağlantılar:
Paylaşım için teşekkürler.
YanıtlaSil