Jump to content

Asp.NET Dersleri [ Başlıyoruz ! ! ]


Recommended Posts

ASP.NET NEDİR?

Asp.net Microsoft tarafından tasarlanan web uygulama dilidir. Programcılar asp.net kullanarak dinamik web siteleri, web uygulamaları ve XML web servisleri geliştirebilirler.

Asp.net .Net platformunun bir parçasıdır ve asp nin devamı olarak nitelendirilmektedir.

Asp.net Common Language Runtime üzerine inşa edilmiştir, bu demektirki programcılar herhangi bir Microsoft .NET dilini kullanarak asp.net kodu üretebilirler.

ASPX UZANTISI

Aspx uzantısı asp.net de programlanan web sitelerinin uzantısıdır. Eğer bir web sayfasının uzatısı aspx ise bu demektirki, bu web sitesi asp.net kullanarak tasarlanmıştır.

Aspx dosyası içerisinde <% -- dinamik kod --%> php,jsp ve asp dede olduğu gibi direk sayfa üzerinde asp.net kodlarıda yazılabilir. Fakat tavsiye edilen asp.net kodlarının code-behind modelinde yazılmasıdır ( Arka plan kodları ).

Bu modeli kullandığımızda asp.net kodlarını başka bir sayfaya kaydeder.

Örnek olarak: index.aspx.cs veya index.aspx.vb bu sayfaları Microsoft Visual Studio otomatik olarak sizin için yaratır.

Bu şekilde yazılan bir web sitesinde programcılar bir olay üzerine kod yazabilirler.

Örnek olarak: Page_load ( Sayfa üretildiğinde )

ASP.NET de Performans

ASPX ve diğer dosyalar IIS virtual host denilen yerde tutulurlar. İlk sayfa açılışında .NET Framework dosyaları .NET assembly diline çevirerek cevap verir ve dll dosyası yaratır. Diğer açılışlardada bu dll leri kullanır ve bu bize çok büyük bir performans sağlar.

ASP.NET Editörleri

Microsoft Expression Web Designer

Visual Studio. NET veya Visual Studio 2005 veya Visual Web Developer 2005 Express Edition (ASP.NET 2.0 için)

Macromedia Dreamweaver MX, Macromedia Dreamweaver MX 2004, veya Macromedia Dreamweaver 8

Link to comment
Share on other sites

Asp.NET ' le log oluşturmak. !

Şimdi asp.net ile yazdığınız herhangi bir sitede oluşan herhangi bir hatanın yakalayarak ve bunu da sonradan incelemek üzere bir Text dosyasında tutmak isteyebiliriz. Bu şekilde hem kullanıcıya kendi istediğimiz sayfayi göstermiş oluruz hemde ileride hata dosyasına bakarak hatanın hangi sayfada olduğunu öğrenip o sayfaya müdahale edebiliriz. Bu yapı profesyonel sitelerde fazlaca kullanılmaktadır.Şimdi yapmamız gerekenleri belli maddeler halinde söyledikten sonra açalım :

Yeni bir proje oluşturun

Projemize bir tane Global.asax (Global Application Class) ekleyin

Default.aspx adında ( Normalde yeni proje açıldıktan sonra kendiliğinden gelir) ve HataSayfasi.aspx adinda sayfalar ekleyin

Default.aspx sayfamıza bir tane "Hata Oluştur" isminde Button ekleyin (Text = "Hata Oluştur" , Name="Button1" )

Projemize Logs isminde bir klasör ekleyin

Şimdi bunları yaptıktan sonra yapmamız gereken ilk başta Global.asax dosyamıza gelip

void Application_Error(object sender, EventArgs e)

{

}

yukarıda görülen Event içine kodlarımızı yazacağız ama bundan önce Global.asax dosyamızın en üstüne şu namespace'i eklemeyi unutmayın

<%@ Import Namespace="System.IO" %>

Çünkü bunlar sayesinde Text dosyasına yazı yazdırıp sunucumuza kaydedeceğiz. Bu arada Application_Error event ini açıklamamız gerekirse bu event (olay) projenizde herhangi bir zamanda ve herhangi bir nedenden çıkan hatalar zamanında çalışan event dir.Onun için bizde sistemimiz açısından genel bir hata yakalama yapmak istediğimizden dolayı kodlarımızı buraya yazacağız ama belli bir sayfada bulunan hataları yakalamak isterseniz onun içinde hatasını yakalamak istediğiniz sayfada try{ } catch { } finally { } blokları kullanarak hatayı yakalabilir ve bunu veritabanına veyahut text dosyasına yazdırabilirsiniz. Yukarıda ki namespace e bakmak gerekirse eğer, text dosyasına hatayı yazdırmamız sırasında kullanılacak olan StreamWriter nesnesini içeren Namespace dir. Şimdi kodlarımıza geçebiliriz :

void Application_Error(object sender, EventArgs e)

{

Response.Redirect("HataSayfasi.aspx"); /* Hata oluşması durumda yönlendirilecek sayfa */

Exception ex = Server.GetLastError(); / *Sistemde en son oluşan hatayı yakalayip Exception türünden bir değişkene atıyoruz */

string HataOlusanSayfa = Request.CurrentExecutionFilePath; /*Burada hatanın hangi sayfada meydana geldiğini öğreniyoruz ve bu sayfayı HataOlusanSayfa adında bir değişkene atıyoruz */

StreamWriter str = new StreamWriter(Server.MapPath("Logs/errorLog.txt"), true); /* str isminde StreamWriter türünden bir nesne örneği oluşturdum. Bunu Server.MapPath() ile yerini gösterdiğim klasörde oluşturacak olan errorLog.txt dosyasına yazmak için kullanılır. Bu arada sorabilirsiniz biz böyle bir klasör açtık ama text dosyası koymadık diye. Endişelenmeyin asp.net bunu sizin yerinize yapacaktir.Bu arada true ise Append yani var olan dosyanın uzerine yazılmasını sağlar. false olması durumda ise önceki yazılanlar silinip üzerine yazılma olacaktır ama açıkcası asla tavsiye etmem bu proje için :D * /

str.WriteLine("---- Hata Olusma Zamani------"); /* Burada ise tırnaklar içine aldığımız string ifadenin belirttiğimiz yere yazılması sağlanır */

str.WriteLine(DateTime.Now.ToString()); /* Hata oluşma tarihini kaydetmek için kullandık */

str.WriteLine("---- Hata Mesaji ------------"); /* Yine string ifade yazılır */

str.WriteLine(ex.Message); /* Burada ise oluşan hatamızı yazıyoruz */

str.WriteLine("---- Mesaj Icerigi ----------");

str.WriteLine(ex.StackTrace); /* Ve son olarak burada ise hatamızın içeriği yazılıyor */

str.Flush();/* Bu komut ise önbellekte tutulan yazılmış olan verilerin silinmesini sağlar */

str.Close(); /*ve nesnesimiz kapatılıp yok edilir */

}

Evet aslinda şuan olayın büyük bir bölümü tamamdır. Şimdi önemli olan hata çıkarmak . Onuda şöyle yapacağız. Konun başında Default.aspx sayfasına bir button koymuştuk hatırlıyorsanız şimdi onun Click eventine şu kodu yazın (Yanlız bu sadece örnek olması amacıyla basit bir koddur. Yazdığımız bu sistem tüm hataları yakalabilir )

protected void Button1_Click(object sender, EventArgs e)

{

Response.Redirect("BuSayfaYok.aspx"); /* Burada amacımız server da olmayan bir sayfaya yönlendirme yapmak ve böylece hata çıkartmak */

}

Evet artık herşeyimiz hazır artık yapmak gereken projeyi derlemek ve Default.aspx üzerinden çalıştırın yani ilk açılan sayfa Default.aspx olsun ve şimdi koyduğumuz butona tıklayın Ne oldu tabiki önceden oluşturduğunuz HataSayfasi.aspx sayfasına yönlendirildiniz ve hatanızın günlüğü tutuldu. Eğer Solution Explorer penceresinde hatanınızın tutulduğu dosyayı göremiyorsanız Refresh tuşuna basınız.

Link to comment
Share on other sites

Asp.NET Veri çekmek ve bu verileri listelemek

Yazımızda veritabanına bağlanıp buradan veri çekmeyi öğreneceğiz.Sonrada döngü kurup verileri listeleyeceğiz.

Herkeste VS.NET olmadığını sayaraktan kodlarımızı CodeBehind olarak yazmayacağız.Bu iş için Not Defteri, ASP.NET Webmatrix ya da FrontPage 6.0'ı kullanabiliriz. (6.0 sürümü ASP.NET'i tanıyor)

Öncelikle localhostumuzda bir klasör açalım ve adı Deneme olsun.Sonra bu klasöre girip.Default.aspx adında bir ASP.NET Web Formu oluşturalım.Sonra ilgili editörümüzle bu dosyayı açalım ve aşağıdaki kodları yazalım.Bu işlemleri yaparken bir hazır veritabanı kullanabilirsiniz.Alanları siz kendinize göre değiştirin.

<%@ Page Language="vb"%>

<%@ Import Namespace="System.Data" %>

<%@ Import Namespace="System.Data.OleDB" %>

<script language="vb" runat="server">

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

Dim objBaglanti As New OleDbConnection(Server.MapPath("Db.mdb"))

objBaglanti.Open()

Dim cmdKomut As New OleDbCommand("SELECT fldBaslik FROM tblIcerikler", objBaglanti)

Dim dtrOku As OleDbDataReader = cmdKomut.ExecuteReader

dtrOku.Read()

Response.Write(dtrOku("fldBaslik"))

dtrOku.Close()

objBaglanti.Close()

End Sub

</script>

Bu örneği çalıştırdığınızda tblIcerikler tablosundaki fldBaslik alanını okutacağız.Ancak bu kayıtların tümünü liste halinde yayınlamak istiyoruz ve ne yapacağız.Endişelenmeyin.

Hemen bir döngü kurarak bu işi halledelim.Sadece <script></script> etiketleri arasında bulunan Sub'ımızda değişiklik yapacağız.Ufak bir döngü kurarak bunuda şu şekilde yapabiliriz.

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

Dim objBaglanti As New OleDbConnection(Server.MapPath("Db.mdb"))

objBaglanti.Open()

Dim cmdKomut As New OleDbCommand("SELECT fldBaslik FROM tblIcerikler", objBaglanti)

Dim dtrOku As OleDbDataReader = cmdKomut.ExecuteReader

While dtrOku.Read

Response.Write(dtrOku("fldBaslik"))

End While

dtrOku.Close()

objBaglanti.Close()

End Sub

Sub'ımızıda bu şekilde değiştirdikten sonra verileri tamamen listeleyebiliriz.Şimdilik bu işlemler üzerinde yoğunlaşın arkadaşlar.Bunlar daha başlangıç.ASP.NET dünyası emin olun çok daha geniş.Önümüzdeki yazıda verileri listelemeye geçeceğiz.

Gerçi bu yazdığımız kod aslında ASP.NET'ten ziyade ASP mantığı ile yazılmıştır.Bu da ASP'den ASP.NET'e geçiş yapanlar için ideal ve anlaşılırdır ileride bunları genişleteceğiz.

Link to comment
Share on other sites

Asp.NET ile veri tabanı işlemleri

Bir web programlama dili için herhalde en önemli şeylerden biri veritabanları ile olan ilişkileri. Hangi veritabanlarına bağlanabildiği, nasıl bağlandığı, yapabildikleri, o dilin seçiminde önemli rol oynuyor.

ASP.Net, diğer alanlarda olduğu gibi veritabanı alanında büyük yenilikler getiriyor. Bu yenilikleri makaleyi okudukça fark edeceksiniz zaten...

ASP'de veritabanına bağlanırken ADO (Active Data Objects) nesneleri kullanırdı. Connection ve Recordsetler tüm işleri görürdü; ancak bu nesnenin eksikleri webte performans açısından kendisini hemen gösteriyordu. Bu yüzden ASP.Net geliştirilirken ADO'da geliştirilerek ADO.Net'e geçilmiştir. Tüm yapısı baştan aşağı değiştirilerek yeni nesneler ve yeni özellikler eklenmiştir.

ADO.Net, .Net Framework sınıf kütüphanesinde 4 tane isim alanı (namespace) ile temsil edilir ve hepsi de System.Data altında bulunur.Bizde uygulamalarımızda bu isim alanları kullanacağız. Bu isim alanlar aşağıdaki gibidir.

System.Data.OleDb - Ole DB ile veritabanlarına bağlanmak için gereken sınıfları içerir.

System.Data.SqlClient - SQL Server 7.0 ve üstündeki versiyonlara bağlanmak için gereken sınıfları içerir.

System.Data.Odbc - ODBC ile veritabanlarına bağlanmak için gereken sınıfları içerir.

System.Data.Oracle - Oracle veritabanına bağlanmak için gereken sınıfları içerir.

System.Data.OleDb isim alanı 3 tane sınıf içerir. Bunlar:

OleDbConnection

OleDbCommand

OleDbDataReader sınıflarıdır.

Eğer daha önce ASP ile uğraştıysanız bu sınıf isimleri size tanıdık gelecektir. Özellikle Connection ve Command nesneleri de zaten klasik ASP de vardı; tabi ki buradaki nesnelerin yapısı oldukça farklı ancak aynı işlemlerde kullanılıyor. DataReader nesnesi ise Recordset benzeri bir nesnesidir.

Bu sınıflardan OleDbConnection veritabanına bağlantıyı açmakta kullanılır.OleDbCommand nesnesi ise OleDbConnection'ın açtığı bağlantı ile SQL sorgularının ve Stored Procedures 'ların çalıştırılmasında kullanılır. OleDbDataReader ise sorgular sonucunda veritabanından dönen sonuçların işlenmesinde kullanılır.

OleDb isim alanı birçok veritabanına erişmekte kullanılabilir. Örneğin Access, Oracle ya da SQL Server. Ancak Microsoft .Net'i geliştirirken ADO.Net 'e SQL Server ile ilgili bir isim alanı ekleyerek, SQL Server bağlantılarında isim alanının kullanılmasını tavsiye etmiştir. Çünkü bu isim alanı atlında sınıflar SQL Server'a özgü yazılmışlardır;bu yüzden daha hızlı bir bağlantı sağlarlar.Bunu şöyle örnekleyebiliriz, OleDb isim alanının sınıfları veritabanlarına OleDB Provider'ı kullanarak erişirler; lakin SqlClient isim alanının sınıfları Sql Server'a Tabular Data Stream (TDS) seviyesinde direk erişirler.

System.Data.SqlClient isim alanı da 3 tane sınıf içerir. Bunlar:

SqlConnection

SqlCommand

SqlDataReader sınıflarıdır.

Gördüğünüz gibi isimleri aslında aynı olan bu sınıflarda OleDb'dekilerine benzer işler yaparlar. Tek farkları ise bu sınıflar sadece Sql Server veritabanına erişimde kullanılabilir.

Bu bilgileri de verdikten sonra örneklerle ASP.Net sayfalarımızda veritabanı uygulamalarına geçebiliriz. Bu yazımızda basit bir veritabanına erişeceğiz. Örneğin bu veritabanı sitemizi destekleyen sitelerin linklerini tutacak. Ben bunun için bir Access veritabanı hazırlayacağım, veritabanının yapısını aşağıdaki resimde görebilirsiniz.

ado_net_1.gif

Yukarıda veritabanımızı ve içeriğini görüyorsunuz. Oldukça basit bir yapıda olan bu veritabanını ben, veritabani.mdb adıyla kaydediyorum. Kayıt işleminden sonra veritabanımızda hazır hale geldiğinde göre adım adım web sayfamızı veritabanımıza bağlayalım. Her adımda kodumuza yeni bir nesne ekleyerek onun hakkında bilgi sahibi olacağız.Ayrıca veritabanımız Access olduğu için bu yazıda OleDb'yi kullanacağız. Erğer siz aynı örneği SQL Server ile yapmayı denerseniz OleDb yerine SqlClient'ı da kullanabilirsiniz.

1. Adım: Veritabanına bağlanma (Connection nesnesi)

Veritabanı ile iletişim kurabilmek, veri okuyup yazabilmek için veritabanı kurulmuş olunan ve açık durumda bir bağlantıya ihtiyaç duyulur. ADO.Net'te bağlantı işlemlerini Connection sınıfları yapar;biz OleDb bağlantı kuracağımız için OleDbConnection nesnesini kullanmamız gerekiyor. Connection nesneleri basit manada veritabanına bağlantıyı sağlarlar. Siz ona bağlantı komutunu (connection string) yollarsınız ve bağlantıyı açmasını istersiniz.Bu nesnenin nasıl kullanılacağına dair örneği aşağıda bulabilirsiniz.

<%@ Page Language="C#" Debug="true" %>

<%@ Import Namespace="System.Data.OleDb" %>

<script Runat="Server" language="C#">

void Page_Load(Object o, EventArgs e)

{

OleDbConnection objBaglanti = new OleDbConnection(); // Bağlantı nesnesi tanımlanıyor.

objBaglanti.ConnectionString = @"PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=C:\Inetpub\wwwroot\yazi_scs\adonet\veritabani.mdb"; // Bağlantı "stringi" yollanıyor.

objBaglanti.Open(); // Bağlantı açılıyor.

}

</Script>

Bağlantı açıldı!

Yukarıdaki kod hakkında biraz konuşmamız gerekir. Gördüğünüz gibi bir 3 satırda ( {} parantezleri arası) veritabanına bağlantıyı kurduk. İstersek bağlantı komutunu (connection string) ilk satırda parametre olarak yollayabilirdik.Yani aşağıdaki gibi bir kullanımda olabilir.

OleDbConnection objBaglanti = new OleDbConnection(@"PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=C:\Inetpub\wwwroot\yazi_scs\adonet\veritabani.mdb"); // Bağlantı nesnesi tanımlanıyor.

objBaglanti.Open(); // Bağlantı açılıyor.

Bu kodda üzerind durabileceğimiz diğer bir nokta da @ (et) işareti. Bu işaretin aslında veritabanı işlemleriyle ilgisi yok; ancak C# dili ile ilgili bir kullanım. Eğer siz C# ta, karakter dizesi (string) içinde \ (ters taksim) işareti kullanacaksanız dizenin başına bu işareti koymalısınız aksi takdirde C# içindeki "escape sequence" kodları ile karışır ve hata verir.

2. Adım: SQL Sorgumuzu yollamak (Command nesnesi)

Artık veritabanına bağlandık, sıra geldi bu veriyi işlemek için SQL sorgumuza. Yazımızın başında da belirttiğimiz gibi SQL sorgularını OleDbCommand nesnesi aracılığı ile bildirir ve çalıştırırız. Lakin OleDbCommand bu konuda muhtaç olduğumuz tek nesne değil, DataAdapter nesnesi ile de sorgularımızı yollayabiliriz; fakat onun kullanımı biraz daha farklı olduğu için onu daha sonraki yazılarımız da göreceğiz.

Biz bu sayfada sadece ekrana veri yazacağımız için SELECT sorgusunu kullacağız. Sorgumuzu tblSiteler tablosunda fldSiteUrl ve fldSiteAdi alanlarını alacak, bunları fldSiteAdina göre A'dan Z'ye dizecek ve bize verecek şekilde hazırlıyorum.

<%@ Page Language="C#" Debug="true" %>

<%@ Import Namespace="System.Data.OleDb" %>

<script Runat="Server" language="C#">

void Page_Load(Object o, EventArgs e)

{

OleDbConnection objBaglanti = new OleDbConnection();

objBaglanti.ConnectionString = @"PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=C:\Inetpub\wwwroot\yazi_scs\adonet\veritabani.mdb";

objBaglanti.Open();

OleDbCommand objCom = new OleDbCommand(); // Command nesnesi yaratıldı

objCom.Connection = objBaglanti; // Kullanılacak bağlantı bildirildi

string strSQL = "Select fldSiteAdi, fldSiteUrl from tblSiteler order by fldSiteAdi"; // sorgumuzu hazırlıyoruz

objCom.CommandText = strSQL; // Sorgumuzu komut objemize bildiriyoruz

}

</Script>

Bağlantı açıldı ve sorgu bildirildi ama çalıştırılmadı!

Bu kodda üstteki koddan farklı olarak OleDbCommand ile başlayan satır var. Bu satırda gördüğünüz üzere nesnemiz tanımlanıyor, ardından gelen satırlarda da önce veritabanına hangi bağlantı nesnesi ile bağlanılacağı ve bağlantıda çalıştırılacak SQL Sorgusu tanımlanıp,bildiriliyor.

.Net ile veritabanı dünyasında adım adım ilerliyoruz. Artık bağlantı ve komut nesnesine sahibimiz. Şimdi ihtiyacımız olan bu sorguyu çalıştırmak ve gelen verileri bir DataReader'a atmak. Böylece bu DataReader'daki veriyi de bir döngü ile ekrana basabileceğiz.

3.Adım: Verilere ulaşmak (DataReader nesnesi)

Artık veriye ulaşma zamanımız geldi. Çünkü aktif bir bağlantımız ve Command nesnemiz var. Tek ihtiyacımız olan bir DataReader nesnesi. Yapacağımız şey DataReader nesnesi tanımlayıp Command nesnesi ile çalıştırmak. Daha sonra DataReader'ı döngüye sokmak ve DataReader'ın Read() metodu false değer döndürene kadar ekrana veritabanındaki verileri yazdırmak.

<%@ Page Language="C#" Debug="true" %>

<%@ Import Namespace="System.Data.OleDb" %>

<script Runat="Server" language="C#">

void Page_Load(Object o, EventArgs e)

{

OleDbConnection objBaglanti = new OleDbConnection();

objBaglanti.ConnectionString = @"PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=C:\Inetpub\wwwroot\yazi_scs\adonet\veritabani.mdb";

objBaglanti.Open();

OleDbCommand objCom = new OleDbCommand();

objCom.Connection = objBaglanti;

string strSQL = "Select fldSiteAdi, fldSiteUrl from tblSiteler order by fldSiteAdi";

objCom.CommandText = strSQL;

OleDbDataReader objReader; // DataReader nesnesini tanımladık

objReader = objCom.ExecuteReader(); // Sorgumuzu çalıştırıp, dönen verileri objReader'a atıyoruz.

objReader.Read(); // Veriyi okuyoruz.

}

</Script>

Veri okundu...

Artık veritabanına ulaştık ve verileri okuduk;ama herhangi bir şekilde ekrana yazdırmadığımız için bir veri ekranda gözükmüyor. Burada dikkatinizi Read() metoduna çekmek istiyorum. Bu metod DataReader'ın en çok kullanacağınız metodudur. Çünkü bir veriyi DataReader ile ekrana yazdırmak için mutlaka önce bu metod çağrılmalıdır, aksi takdirde hata mesajı ile karşılaşırsınız. Ayrıca Read() metodu veritabanına yollanan sorgu veri döndürüyorsa true, döndürmüyorsa false değeri döndürür.Yani klasik ASP de .EOF kontrolünü burada .Read() metodu ile yapacaksınız.

Bu noktada şunu da belirtmek lazım, DataReader bu konuda ki tek alternatif değildir. DataAdapter nesneleri ve DataSet nesneleri sayesinde de veritabanından veri okuyabiliriz; ancak ben bu yazı da sadece DataReader'ı anlatacağım.

4.Adım: Verileri ekrana aktarmak

Bu aşamaya kadar sağ salim geldiysek verilerimizi ekrana aktarabiliriz. Bunun için değişik alternatifler olmasına karşın ben ilk önce bir while döngüsü ile ekrana yazdırmayı burada örnekleyeceğim; bunun nedeni de eski ASP'cilerin tanıdıkları bir kullanım oluşturmak.Daha sonra da diğer bir alternatifi örnekleyeceğim; verileri bir Reapter nesnesine bağlamak ve öyle ekrana yazdırmak.

<%@ Page Language="C#" Debug="true" %>

<%@ Import Namespace="System.Data.OleDb" %>

<script Runat="Server" language="C#">

void Page_Load(Object o, EventArgs e)

{

OleDbConnection objBaglanti = new OleDbConnection();

objBaglanti.ConnectionString = @"PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=C:\Inetpub\wwwroot\yazi_scs\adonet\veritabani.mdb";

objBaglanti.Open();

OleDbCommand objCom = new OleDbCommand();

objCom.Connection = objBaglanti;

string strSQL = "Select fldSiteAdi, fldSiteUrl from tblSiteler order by fldSiteAdi";

objCom.CommandText = strSQL;

OleDbDataReader objReader;

objReader = objCom.ExecuteReader();

while(objReader.Read()) // Veriyi, veri bitene kadar okuyoruz.

{

Response.Write("<a href='"+ objReader["fldSiteUrl"].ToString() +"'>"+ objReader["fldSiteAdi"].ToString() +"</a><br>"); // Ekrana yazdırıyoruz.

}

objReader.Close();

objReader = null;

}</Script>

Şimdi diğer alternatif olan Repeater kullanımını örnekleyelim. Her iki kodu denediğinizde de aynı çıktıyı alacağınızı göreceksiniz.

<%@ Page Language="C#" Debug="true" %>

<%@ Import Namespace="System.Data.OleDb" %>

<script Runat="Server" language="C#">

void Page_Load(Object o, EventArgs e)

{

OleDbConnection objBaglanti = new OleDbConnection();

objBaglanti.ConnectionString = @"PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=C:\Inetpub\wwwroot\yazi_scs\adonet\veritabani.mdb";

objBaglanti.Open();

OleDbCommand objCom = new OleDbCommand();

objCom.Connection = objBaglanti;

string strSQL = "Select fldSiteAdi, fldSiteUrl from tblSiteler order by fldSiteAdi";

objCom.CommandText = strSQL;

OleDbDataReader objReader; // DataReader nesnesini tanımladık

objReader = objCom.ExecuteReader(); // Sorgumuzu çalıştırıp, dönen verileri objReader'a atıyoruz.

rpVeri.DataSource = objReader;

rpVeri.DataBind();

objReader.Close();

objReader = null;

}

</Script>

<asp:Repeater id="rpVeri" runat="server">

<ItemTemplate>

<a href="<%# DataBinder.Eval(Container, "DataItem.fldSiteUrl")%>"><%# DataBinder.Eval(Container, "DataItem.fldSiteAdi")%></a><br>

</ItemTemplate>

</asp:Repeater>

Link to comment
Share on other sites

Asp' den Asp.NET'e geçiş . .

ASP.Net ne kadar yeni bir teknoloji de olsa, ASP.Net'e en büyük geçişler "Klasik ASP" kullanıcılarından olmaktadır. Bu kullanıcılar yıllardır bekledikleri bir çok özelliği birden tek bir teknolojide görünce hızlı bir geçişe başladılar.

ASP bilen kullanıcılar için, ASP.Net'i sıfırdan öğrenmek pek kolay olmuyordu. Onlar nelerin değiştiğini merak ediyorlardı ya da klasik asp'de yaptıkları işlemlerin .Net'te nasıl yapılacaklarını. Bende bu yazımızda, klasik ASP kullanıcıları için bir yol haritası hazırlamayı uygun gördüm.

1. Response ve Request nesneleri

Klasik ASP'de elimiz ayağımız olan Response ve Request nesneleri ASP.Net'te de bulunuyor. Normal kodlarınız içinde kullanabilirsiniz. Ancak, birkaç değişikliğe gidilmiş.

Klasik ASP:

Response.Write "Merhaba Dünya"

ASP.Net [VB.Net]

Response.Write("Merhaba Dünya")

ASP.Net [C#]

Response.Write["Merhaba Dünya"];

2. Include

Yine ASP ile çok sık kullandığımız include file sunucu kontrolü olduğu için ASP.Net'te de olmasına rağmen, ASP.Net Kullanıcı Kontrolleri (User Controls) sayesinde çok daha esnek bir yapıya izin veriyor. Örneğin siz ASP'de sayfanıza reklam.asp isimli bir dosya ekliyordunuz.

Klasik ASP:

<!-- #include file="reklam.asp" -->

ASP.Net:

İlk önce reklam.asp'yi reklam.ascx yapın. Sonra bu sayfanın ilk satırına aşağıdaki kodu ekleyin.

[VB.Net]

<% Control Language = "VB" %>

[C#]

<% Control Language = "C#" %>

Sonra reklam.asp'yi eklediğiniz sayfanın başına da şu kodu ekleyin.

<%@ Register TagPrefix="Ad" TagName="Banner" Src="reklam.ascx" %>

Son olarakta reklam.ascx'in sayfanızda nerelerde görünmesini istiyorsanız, oralara aşağıdaki kodu ekleyin.

<Ad:Banner runat="server" id="Reklam"></Ad:Banner>

Daha zahmetli gibi de dursa, Kullanıcı Kontrolleri'nin özelliklerini öğrenince, aslında çok faydalı olduğunu göreceksiniz.

3. Değişken tanımlama ve "Option Explicit"

VBScript, bizi değişken tanımlama konusunda zorlamazdı; ancak biz daha stabil kodlar yazmak için Option Explicit komutunu kullanarak; değişken tanımlamayı zorunlu hale getiriyordu. ASP.Net'te zaten değişken tanımlamak zorunlu; bu yüzden Option Explicit'i ayrı olarak kodda yazmıyoruz; bunu Page Directive denen bölümde tanımlıyoruz.

Klasik ASP:

<% Option Explicit %>

ASP.Net [VB.Net]:

<%@ Page Language="VB" Explicit = "True"%>

ASP.Net [C#]:

<%@ Page Language="C#" Explicit = "True"%>

4. Set anahtar sözcüğü

Klasik ASP'den hatırladığımız Set anahtar sözcüğü VB.Net'te bulunmamaktadır.

Klasik ASP:

<% Set objConn = Server.CreateObject("Adodb.Connection") %>

ASP.Net [VB.Net]:

<% objConn = Server.CreateObject("Adodb.Connection") %>

5. ADO yerine ADO.Net

Klasik ASP'de veritabanı işlemleri için ADO kullanılırdı; ancak ASP.net ile beraber ADO.Net geliştirildi ve kullanıma sunuldu. Bu yüzden veritabanı uygulamaları biraz değişti. Örneğin bir önceki madde de bir Connection nesnesinden bahsettik ama bu ADO kullanılan hali idi; bunu ADO.Net'e şöyle çevirebiliriz.

Klasik ASP:

<% Set objConn = Server.CreateObject("Adodb.Connection") %>

ASP.Net [VB.Net]:

Dim objConn as new OleDbConnection("[bağlantı satırları…]")

ASP.Net [C#]:

OleDbConnection objConn = new OleDbConnection("[bağlantı satırları…]");

6. <script></script> blokları

ASP.Net'te fonksiyonlar, metotlar, sınıflar gibi programatik tanımalamalar <script></script> blokları arasına toplanmıştır. Örneğin ASP'de herhangi bir yerde bildirilebilen fonksiyon ASP.Net'te sadece <script></script> blokları arasında bildirilebilir.

Klasik ASP:

<%

Function ParaBicimlendir(sayi)

ParaBicimlendir = FormatNumber(sayi,0) &" TL"

End Function

%>

ASP.Net [VB.Net]:

<script language="VB" runat="server">

Function KareAl(sayi as integer) As integer

KareAl = sayi ^2

End Function

</script>

ASP.Net [C#]:

<script language="C#" runat="server">

Class Sinif

{

public string KareAl(int sayi)

{

return sayi ^2;

}

</script>

7. Date ve Now fonksiyonları

Bildiğiniz gibi ASP'de Date() ve Now() fonksiyonları ile kolayca tarihi ve saati alabiliyorduk. Eğer ASP.Net'te bunu denerseniz hata ile karşılaşırsınız.

Klasik ASP:

<% Response.Write Now() %>

ASP.Net[VB.Net]:

<% Response.Write(DateTime.Now()) %>

ASP.Net[C#]:

<% Response.Write[DateTime.Now()]; %>

8. IsNull kontrolü

Yine VBS'de tanımlı olan IsNull kontrolü yerini VB.Net'te IsDbNull fonksiyonuna bırakmıştır.

Klasik ASP:

<% if isNull(degisken) then Response.Write "Boş" %>

ASP.Net [VB.Net]:

<%

if isDbNull(degisken) then Response.Write("Boş")

%>

Artık ASP ile ASP.net arasındaki temel farklı biliyorsunuz; ancak bu sadece daha başlangıç diyebilirim. Çünkü ASP ile ASP.net arasında dağlar kadar fark var. Bunları kodlarınızı yazarken fark edeceksiniz.

Link to comment
Share on other sites

Web Formları anlamak . .

Web formlarını tanımlayacak olursak içeriğinde temel olarak html, kullanılan dilin kodu ve sayfa içerisinde kullanılabilecek tüm kontrolleri içeren bir bütündür.

Asp.net ile gelen bir çok yenilikle beraber asp gibi artık klasikleşmiş web programlama araçlarında kullandığımız bir çok uygulamayı ne kadar basit yöntemlerle halledebileceğimizi göreceğiz. Öncelikle Asp.net' in temeli olan web formlarını inceleyelim.

Web Formlarının en büyük özelliği hem programcıya hem de tasarımcıya ayrı arayüzler sağlamasıdır. Bunun anlamı programcı webformum.aspx.cs (veya webformum.aspx.vb) dosyasında uygulama için gerekli kodları yazarken tasarımcıda webformum.aspx dosyasında gerekli tasarımı yapabilecektir. Böylelikle tasarımcı ve programcının kodları bir birine karışmadan çalışabileceklerdir. Örneğin; Web formumuzun adı webformum.aspx ise kod sayfamın adı VB.NET kullanıyorsam webformum.aspx.vb, C# kullanıyorsam webformum.aspx.cs olacaktır. Buna göre kod sayfamızın adı kullanılan dile göre değişmiş olacaktır.

Bir web formu yapısal olarak 3 ana bölümden oluşur.

- @Page

- Body

- Form

Bu 3 ana maddeden bizim için en yeni olanı @Page'tir. Şimdi ayrıntılı bir şekilde bu özellikleri inceleyelim.

@Page: @Page özelliği bir web formundaki genel fonksiyonları gösterir. Her web formunda mutlaka 1 tane bulunmalıdır. Aldığı parametrelerle web formuna ait özellikleri içerir. Aldığı parametrelerden bazıları şunlardır.

- Language: Web formumuzda kullanacağımız dili gösterir. Kullanımı

<%@ Page language="KullanılacakDil">

şeklindedir. Burada kullanılacak dil bölümüne .Net Framework'ün desteklediği her hangi bir dil gelebilir. Örneğin;

<%@ Page language="c#">

yada

<%@ Page language="vb">

gibi.

- CodeBehind: Web formunda kullanılan kod sayfasının ismini içerir. Kullanımı

<%@ Page CodeBehind="KodSayfasininAdi">

şeklindedir. Kullandığınız dile göre KodSayfasininAdi'nın yerini webformum.aspx.cs veya webformum.aspx.vb alabilir.

- SmartNavigation: Yalnızca IE 5.5 ve üstü tarayıcılar için geçerli olan bir özelliktir. True ve False olmak üzere 2 değer alabilir. Eğer aldığı değer True ise web formunuz yenilediğinizde sayfa başına dönmeyip, yenileme sonun da bulunduğunuz konuma geri dönmenizi sağlar. Kullanımı

<%@ Page SmartNavigation="True|False">

şeklindedir.

- Bu parametrelerin dışında @Page autoEventWireup, buffer, inherits vs. gibi bir çok parametre alır. Bu parametrelere ileriki uygulamalarımızda değineceğiz.

Body: Tıpkı Html'de olduğu gibi sayfa içerisinde bulunan tüm etiketler Body etiketi içerisinde bulunurlar. En önemli parametresi yine asp.net ile birlikte gelen yeniliklerden biri olan pageLayout(ms_positioning) özelliğidir.

- pageLayout(ms_positioning): Web form içerisinde kullanacağımız nesnelerin sayfa içerisinde nasıl görünmesi gerektiğini ayarlar. 2 değer alabilir. FlowLayout ve GridLayout.

· GridLayout: HTML'deki div etiketleri gibi çalışır ve sayfa içerisinde çalışacağımız nesnelerin style özelliklerini kullanarak sayfa içerisindeki konumlarını belirler. Yani Nesneyi sayfa içerisinde nereye koyarsanız o konumda kalacaktır. VS.NET içerisinde varsayılan olarak bulunan özelliktir ve VS içerisinde noktalarla görüntülenir.

· FlowLayout: Sayfamızın birebir tasarlanmasını sağladığı özelliktir. Örneğin; Bir tablonun genişliğinin %100 verilmesi gibi. Bunun anlamı sayfamızın büyüklüğü değiştirdiğimizde web formumuzun boyutununda sayfa büyüklüğüne göre değişeceği anlamına gelir. GridLayout'da ise ölçüler style etiketleri ile tanımlandığı için sayfa büyüklüğüne göre esneklik göstermeyecektir. FlowLayout'da VS.NET içerisinde noktalar gözükmeyecektir.

<body MS_POSITIONING="GridLayout"> görüntü

GridL.gif

<body MS_POSITIONING="FlowLayout"> görüntü

FlowL.gif

Form: Her web formunda yalnızca 1 tane form bulunabilir.

Yani ASP'de kullandığımız gibi birden çok form bir sayfa içerisinde

bulunamaz. Bu özelliğin asp.net uygulamalarınızda nasıl

kullanılacağını ayrıntılı olarak göreceğiz. Şimdi Form özelliğimizin

alacağı parametrelere bakalım.

- Method: HTML'den de bildiğimiz gibi Post ve Get olmak üzere 2

parametre alır. Kullanımı

<form method="Post|Get">

şeklindedir.

- ID: Asp.net uygulamaları yazarken form'un ve form içerisine

koyacağımız diğer nesnelerin en çok kullanacağımız parametresi

ID olacak. ID , Asp.net'te nesnelere tanımlayıcı isim bilgisi vermek

için kullanacağız. Böylelikle kullandığımız nesnenin ID'si bizim

için kod sayfamıza açılan kapı işlevini görecek ve nesneleri

ID'lerini kullanarak programlarımızda nesnelere işlem yaptırmamızı

sağlayacak. Kullanımı

<form ID="FormumunAdi">

şeklindedir.

- Runat: Yine Asp.net ile yeni gelen özelliklerden

biride form ve form içerisinde kullanacağımız nesnelere

vereceğimiz runat özelliğidir. Aldığı tek parametre server'dır.

Bu özellik ile klasik HTML etiketlerimizi HTML sunucu kontrollerine

dönüştürebilecek ve web kontrollerimizin sunucu tarafında

çalışmasını sağlayabileceğiz. Runat özelliğine dair

ayrıntılı bilgileri Html sunucu kontrolleri ve web

kontrolleri ile ilgili yazılarımızda ayrıntılı şekilde

göreceğiz. Kullanımı

<form runat="server">

şeklindedir.

Buna göre bir form etiketinin genel görünümü aşağıdaki gibi olacaktır.

<form ID="FormumunAdi" method="Post|Get" runat="server">

Link to comment
Share on other sites

Resim Üzerine Yazı Yazdırmak . .

<%@ Page Language="VB" %>

<%@ Import Namespace ="System.Drawing" %>

<%@ Import Namespace ="System.Drawing.Imaging" %>

<%@ Import Namespace ="System.Drawing.Drawing2D" %>

<%@ Import Namespace ="System.Drawing.Text" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "

<script runat="server">

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

Dim bitmapimage As New Bitmap(Server.MapPath("yazdim.jpg"))

Dim graphicsimage As Graphics = Graphics.FromImage(bitmapimage)

graphicsimage.SmoothingMode = SmoothingMode.AntiAlias

graphicsimage.DrawString("Özgür Demirel", New Font("Tahoma", 40, FontStyle.Italic), SystemBrushes.WindowText, New Point(0, 510))

Response.ContentType = "image/jpeg"

bitmapimage.Save(Response.OutputStream, ImageFormat.Gif)

graphicsimage.Dispose()

bitmapimage.Dispose()

End Sub

</script>

<html xmlns="

Please register to see this content.
>

<head runat="server">

<title>Untitled Page</title>

</head>

<body>

<form id="form1" runat="server">

</form>

</body>

</html>

Link to comment
Share on other sites

Asp.NET ' de PDF okuma

<%@ Page Language="C#" Debug="true" %>

<%@ import Namespace="CrystalDecisions.CrystalReports.Engine" %>

<%@ import Namespace="CrystalDecisions.Shared" %>

<%@ import Namespace="System.Data" %>

<%@ import Namespace="System.IO" %>

<%@ import Namespace="System.Xml" %>

<%@ import Namespace="System.Text" %>

<script runat="server">

public void Page_Load(Object sender, EventArgs E) {

//*** INSTRUCTIONS:

//define action for this program

//1. set action to "CreateSchemaFile"

//2. run program which creates your .xsd schema file

//3. create crystal report based on that file

//4. then set action permanently to "CreatePdf"

//the command

string action = "CreatePdf";

//variables

string tableName = "fin";

string rptFile = "fin.rpt";

string xsdFile = "fin.xml";

string pdfFile = "fin.pdf";

//either create the schema (first time only) or the pdf file

if(action.ToUpper() == "CREATESCHEMAFILE") {

DataTable dt = new DataTable();

dt = DummyTable();

DataSet ds = new DataSet();

ds.Tables.Add(dt);

CreateSchemaFile(xsdFile,ds);

Response.Write("Your schema file has been created:<br/><br/> <b>" + Server.MapPath(xsdFile) + "</b><br/><br/>");

Response.Write("Use it to create your Crystal Reports report file named:<br/><br/> <b>" + Server.MapPath(pdfFile) + "</b>");

} else {

//create the report document

ReportDocument doc = new ReportDocument();

string fileName = Server.MapPath(rptFile);

doc.Load(fileName);

DataTable dt = DummyTable();

dt.TableName = tableName;

DataSet ds = new DataSet();

dt.TableName = "Table";

ds.Tables.Add(dt);

doc.SetDataSource(ds);

ExportOptions exportOpts = doc.ExportOptions;

exportOpts.ExportFormatType = ExportFormatType.PortableDocFormat;

exportOpts.ExportDestinationType = ExportDestinationType.DiskFile;

exportOpts.DestinationOptions = new DiskFileDestinationOptions();

// Set the disk file options.

DiskFileDestinationOptions diskOpts = new DiskFileDestinationOptions();

( ( DiskFileDestinationOptions )doc.ExportOptions.DestinationOptions ).DiskFileName = Server.MapPath("fin.pdf");

doc.Export();

Response.Write(dt.Rows.Count);

Response.Write("<a href=\"" + pdfFile + "\">" + pdfFile + "</a>");

}

}

private void CreateSchemaFile(string fileName, DataSet ds) {

string absoluteFileName = HttpContext.Current.Server.MapPath(fileName);

FileStream myFileStream = new FileStream (absoluteFileName, FileMode.Create);

XmlTextWriter myXmlWriter = new XmlTextWriter(myFileStream, Encoding.Unicode);

ds.WriteXml( myXmlWriter,XmlWriteMode.WriteSchema );

myXmlWriter.Close();

}

private DataTable GetTheData() {

//get datatable

DataTable dt = qs.GetDataTable("SELECT * FROM fin");

DataTable d2 = dt.Copy();

return d2;

}

private DataTable DummyTable() {

//create table

DataTable dt = new DataTable("Employees");

dt.Columns.Add("id",Type.GetType("System.Int32"));

dt.Columns.Add("FirstName",Type.GetType("System.String"));

dt.Columns.Add("LastName",Type.GetType("System.String"));

dt.Columns.Add("HireDate",Type.GetType("System.DateTime"));

//fill rows

DataRow dr;

for(int x=1;x<=10;x++) {

dr = dt.NewRow();

dr["id"] = x;

dr["FirstName"] = "Joe" + x;

dr["LastName"] = "Smith" + x;

dr["HireDate"] = DateTime.Now;

dt.Rows.Add(dr);

}

return dt;

}

</script>

Link to comment
Share on other sites

  • 3 hafta sonra ...
hocam kusura bakmayın ama şimdi bunlar asp.net dersleri mi oluyor?

kopyala yapıştırla yararlı değil zararlı olursunuz (akıl karıstırarak)

Ama yine de tşkler, kolay gelsin

sana kimse oturda bu dersleri oku demiyor kardeşim.

derslere başladık ama zaten yarım kaldı.

Sıfırdan görüntülü derslerle devam edeceğiz inşallah.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...