ASP.NET
ASP.NET sunucu taraflı bir web programlama teknolojisidir. Aslında ASP.NET tam anlamıyla bir dil değil, interaktif web siteleri oluşturabilmek amacıyla farklı dillerin kullanılabilmesini sağlayan bir teknolojidir. ASP'den türemiş gibi gözükse de aslında ASP'yle arasında dağlar kadar fark vardır. ASP.NET, .Net altyapısını kullanır. Dolayısıyla ASP.NET ile .Net Framework kütüphanesini kullanabiliriz. ASP.NET ile web siteleri hazırlamak için Visual Web Developer yazılımını kullanabilirsiniz. ASP.NET teknolojisi ile web siteleri oluşturabilmek için C# ya da Visual Basic.NET dillerinden birini biliyor olmamız gerekir. Bu kitapta C# kullanılmıştır.
ASP.NET dosyalarının uzantısı aspx'tir. Bu dosya sunucudan istendiğinde IIS devreye girer. IIS, aspx dosyasının içinde .NET kodları gördüğünde bu kodları işlemesi için .NET Framework'a gönderir. .NET Framework, .NET kodlarını işler ve kodların cevabını metin olarak IIS'e gönderir. Son olarak IIS, .NET Framework'un cevaplarını ve sayfa içinde gömülü HTML kodlarını birleştirerek istemciye gönderir. Son tahlilde IIS'in istemciye gönderdiği kod sadece istemci taraflı dillerin (HTML, CSS, JavaScript) kodlarıdır.
ASP.NET'le web sayfası geliştirme yolları
[değiştir]ASP.NET ile değişik şekillerde web sayfaları oluşturabiliriz:
- .NET kodlarıyla HTML kodlarını aynı dosyada (aspx) tutabiliriz.
- .NET kodlarını ayrı bir cs dosyasında, HTML kodlarını aspx dosyasında tutar; aspx dosyasına ilgili cs dosyasını kullanacağımızı belirten bildirim ekleriz.
- .NET kodlarını derlenmiş hâlde bir DLL dosyasında tutar, aspx dosyasından (gerekli bildirimi ekleyerek) bu DLL dosyasındaki bir sınıfı kullanabiliriz.
Şimdi isterseniz bu yöntemleri teker teker görelim.
.NET kodlarını aspx dosyasının içine gömme
[değiştir]Aşağıdaki kodu inceleyiniz:
<%@Page Language="C#"%>
<!DOCTYPE html>
<html><head><title>İlk ASP.NET web sayfamız</title>
<meta charset="UTF-8"></head>
<body><p>Merhaba Dünya! Şu an sunucudaki tarih ve saat: <%=DateTime.Now.ToString()%></p>
</body>
</html>
En başında, bu sayfanın içinde sunucu tarafında çalıştırılacak dinamik kodlar olduğunu ve bu kodların C#'la yazıldığını belirten bildirimi ekliyoruz. Sonra klasik HTML kodlarımızı yazıyoruz. Kodun içinde geriye string bir değer döndüren .NET kodlarını <%= ve %> arasına alıyoruz. Bu .NET kodunun döndürdüğü değer IIS tarafından istemciye salt metin olarak gönderilecektir.
.NET kodlarını ayrı bir cs dosyasında tutma
[değiştir]Cs dosyasının içeriği
using System;
using System.Web.UI;
public class Sinif : Page
{
public int Carpim;
public int Carp(int s1, int s2)
{
carpim = s1*s2;
return Carpim;
}
}
Bu dosyaya program.cs adını verip web sunucu klasörümüze koyalım. Sınıfı public olarak belirtmeliyiz. Çünkü bu sınıfa bu dosyanın dışından erişeceğiz. Şimdi aspx dosyamızı yazalım:
<%@Page Language="c#" Inherits="Sinif" Src="program.cs"%>
<script language="c#" runat="server">
public void Page_Load(Object sender, EventArgs e)
{
Response.Write(Carp(7,8));
}
</script>
<!DOCTYPE html>
<html><head>
<meta charset="UTF-8">
<title>İlk ASP.NET Web Sayfamız</title></head>
<body></body></html>
Bu web sayfası ekrana 56 yazacaktır. Gördüğünüz gibi aspx dosyasında .NET kodu çalıştıracağımız yerleri <script> etiketiyle çevreliyoruz. Page_Load() metodu sayfa açıldığında çağrılacak özel metodumuz. Metoda başka bir isim verirsek veya parametreler değişik olursa sayfa açıldığında çağrılmaz.
.NET kodlarını derlenmiş hâlde ayrı bir DLL'de tutma
[değiştir]Şimdi aspx dosyasını şöyle yazın:
<%@Page Language="c#" Inherits="Sinif"%>
<script runat="server">
public void Page_Load(Object sender, EventArgs e)
{
Response.Write(Carp(3,4));
}
</script>
<!DOCTYPE html>
<html><head>
<meta charset="UTF-8">
<title>İlk ASP.NET Web Sayfamız</title></head>
<body></body></html>
Aspx dosyamız bu şekilde. Önceki yazdığımız cs dosyasında değişiklik yapmadan .NET Framework'un csc.exe derleyicisiyle DLL olarak derleyip web sunucumuzun bin klasörüne kopyalıyoruz.
ASP.NET ile sayfadaki HTML kontrollerine erişme
[değiştir]Normalde sayfadaki HTML kontrolleri ASP.NET için salt metindir. Bu yüzden onlara varsayılan durumda erişemeyiz. Bu kontrollere erişebilmek için ek kodlama yapmalıyız. Aşağıdaki kodu inceleyiniz:
<form runat="server">
<input type="text" id="metin" runat="server">
<input type="submit" id="gonder" value="Yolla" runat="server">
</form>
Koddan da görebileceğiniz üzere ASP.NET'le HTML kontrollerine erişebilmek için
- Bütün kontrollerin <form> etiketi içinde olması lazım.
- form etiketine runat="server" seçeneği eklenmiş olması lazım.
- Her form kontrolüne id="id" ve runat="server" seçenekleri eklenmiş olması lazım. Bu kontrollere ASP.NET'ten bu id aracılığıyla erişeceğiz.
Örnek bir ASP.NET programı:
<%@Page Language="C#"%>
<!DOCTYPE html>
<html><head><title>ASP.NET Örneği</title><meta charset="UTF-8"></head>
<script runat="server">
void Metot(object source, EventArgs e)
{
metin2.Value="Merhaba "+metin.Value+" !!!";
}
</script>
<body>
<form runat="server">
İsim : <input type="text" id="metin" runat="server">
<input type="submit" id="gonder" value="Yolla" onServerClick="Metot" runat="server">
<input type="text" id="metin2" runat="server">
</form>
</body></html>
Bu programla, kullanıcı birinci metin kutusuna adını yazıp butona bastığında ikinci metin kutusuna o ada hitaben karşılama metni yazılacaktır.
Veri tabanı işlemleri
[değiştir]Connection nesnesi oluşturma
[değiştir]MSSQL veri tabanları için:
SqlConnection con=new SqlConnection("Data Source=bilgisayar;Initial Catalog=veritabani;Integrated Security=True");
MS Access için:
OleDbConnection con=new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=dosya.mdb");
Connection nesnesi oluşturduktan sonra yapmamız gereken, veri tabanına bağlantılı şekilde mi yoksa bağlantısız şekilde mi bağlanacağımızı belirlemektir.
Bağlantılı olarak veri tabanına bağlanma
[değiştir]Bu bağlantı türünde veri tabanıyla ilgili işlem yaparken veri tabanına sürekli bağlı olmamız gerekir.
MSSQL veri tabanları için:
con.Open(); SqlCommand cmd=new SqlCommand("select * from tablo",con);
MS Access için:
con.Open(); OleDbCommand cmd=new OleDbCommand("select * from tablo",con);
Bu adımdan sonra gerek MSSQL gerekse de Access için yapılacak işlem aynıdır. Aşağıdaki satırlardan biriyle SQL cümlesi çalıştırılır.
cmd.ExecuteNonQuery(); //Geriye herhangi bir şey döndürmeyen SQL cümleleri için. Geriye int tipinde etkilenen kayıt sayısı döndürülür. cmd.ExecuteScalar(); //Geriye tek bir değer döndüren SQL cümleleri için. (Object tipinde döndürülür.) cmd.ExecuteReader(); //Geriye bir tablo döndüren SQL cümleleri için. Veri tabanının tipine göre geriye ya SqlDataReader ya //ya da OleDbDataReader nesnesi döndürür.
OleDbDataReader ve SqlDataReader sınıfları
[değiştir]Bu sınıflar SqlCommand veya OleDbCommand sınıfının ExcuteReader() metodu ile oluşan nesneleri temsil ederler. Yani bu sınıflar bir tablo temsil ederler. Tablodaki satırlar arasında dolaşmak için OleDbDataReader veya SqlDataReader sınıflarına ait olan static olmayan Read() metodu kullanılır. Her Read() metodu aktif kaydı bir birim öteler ve true döndürür. Eğer aktif kayıt ötelenemiyorsa geriye false döndürür.
OleDbDataReader rdr=cmd.ExecuteReader(); while(rdr.Read()) Label1.Text=rdr[0]+" - "+Label1.Text; con.Close();
Bağlantısız olarak veri tabanına bağlanma
[değiştir]Bağlantısız veri tabanında veri tabanındaki veriler bir kere çekilir. İşlemler bu çekilmiş veriler üzerinde yapılır. En sonda değiştirilmiş veriler tekrar veri tabanına yazılır. Bağlantısız yöntemde veriler çekildikten sonra veri tabanıyla bağlantının kopması programın işleyişine engel değildir. Veri tabanı türüne göre önce bir DataAdapter nesnesi oluşturmalıyız:
OleDbDataAdapter adp=new OleDbdataAdapter("select * from tablo",con); //veya SqlDataAdapter adp=new SqlDataAdapter("select * from tablo",con);
Daha sonra bir GridView DataAdapter'daki verilerle doldurulabilir:
DataSet ds=new DataSet(); adp.Fill(ds); GridView1.DataSource=ds.Tables[0]; GridView1.DataBind();
Stored Prosedürler
[değiştir]Stored prosedürler Access'te desteklenmez. Stored prosedürleri kullanabilmemiz için yalnızca MSSQL gibi bir veri tabanı gereklidir.
Stored prosedür hazırlama
[değiştir]create procedure isim @degisken1 nvarchar(10), @degisken2 nvarchar(10) as begin select * from tablo end go
Stored prosedür çalıştırma
[değiştir]SqlCommand cmd=new SqlCommand("exec isim 'değer1', 'değer2'",con); SqlDataAdapter adp=new SqlDataAdapter(cmd); //Geri kalan kısım tahmin ettiğiniz gibi
-- ekleme
sqlcommand cmd... satırından sonra cmd.CommandType=CommandType.StoredProcedure; // eklenmesi gerekir ki daha sonra procedür bir parametre istiyorsa cmd.parameters.AddWithValue("@parametretanımı",--parametenin alınacağı/uygulanacağı yer--)
Dosyalarla ilgili işlemler
[değiştir]Dosyaya yönlendirme
[değiştir]Response.Redirect("dosya.htm");
Adres çubuğundaki verileri alma
[değiştir]Başka bir dosyadan aspx dosyamıza http://.../default.aspx?ad=bekir&soyad=oflaz şeklinde bir link verildiğinde aspx dosyamıza koyacağımız aşağıdaki satırla bu URL'deki verileri alabiliriz.
Label.Text=Request.QueryString["adi"].ToString();
Bu satır sonucunda Label'ın Text'i bekir
olacaktır.
Dosya upload ettirme
[değiştir]Bunun için sayfamıza bir FileUpload nesnesi getiriririz ve aşağıdaki kodu yazarız.
if(FileUpload1.HasFile) //Kullanıcının bir dosya upload etmek için halihazırda bir dosya seçip seçmediği kontrol ediliyor. FileUpload1.SaveAs(Server.MapPath(FileUpload1.FileName)); //Burada dosya, aspx dosyamızın bulunduğu klasöre orijinal //adıyla kaydediliyor.
Web servisleri
[değiştir][WebMethod] public int topla(int a,int b) { return a+b; }