Ana içeriğe atla

Asp.Net Access veritabanina resim ve nesne kaydetmek OLE Nesnesi

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
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 Class
Yukarı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 Class

OleDisplay.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:

Yorumlar

Yorum Gönder

Bu blogdaki popüler yayınlar

Firebird SQL Table oluşturma ve SQL komutları

2 nci  Firebird SQL veritabanı blogunda bu kez mevcut Firebird veritabanına ISQL ile bağlanmayı veritabanı nesnelerini oluşturmayı (create table), Kayıt eklemeyi (ınsert) ve kayıtları izlemeyi (show) ile önemli SQL komutlarını anlatmaya çalışacağım...

Firebird Veritabanı Nedir ? Nasıl Kullanılır

Firebird ücretsiz veritabanı kullanmaya ne dersiniz.Üstelik hiç bir süre ve veri sınırı olmadan kulağa hoş geliyor değilmi.Bu Blogta Borland açık kaynak interbase 6 sürümünden sonra ortaya çıkmış ve gelişimini sürekli sürdürmüş Firebird veritabanına bir göz atıcaz. İnternet üzerinde Firebird ile kaynağa çok sık rastlamazsınız artık bu blogtan Firebird ile ilgili bilgileri takip edebilirsiniz...