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
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 gerekenlerCode 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