LINQ (Language Integrated Query) : .net 3.0 ile gelen bir yenilik. Veri tabanında select işlemleri yapmayı sevenler için süper bir özellik. Normalde yazmamız çok zaman alacak işlemleri LINQ sayesinde çok kısa bir zamanda yapabiliyoruz. Değişik çeşitleri var LINQ, LINQ to SQL, LINQ to XML vb...
Ben şimdi genel anlamda proje içinde dizilerde yapacağımız bazı örnek sorgular yapacağım başlangıç olsun diye sizinde dikkatinizi çekecektir ne kadar kolay olduğu. Belki de buradan görüp de öğrenmeye başlayanlar olabilir diye de bir başlangıç yapayım dedim ;).
Öncelikle şunu belirteyim var değişkeni. Javascriptte bulunan var değişkeni burada da aynı mantıkla kullanılıyor içinde her türlü veri tutabilen bir nevi object nesnesi tarzında bir değişken.
int[] sayilar={3,2,5,6,1,2,8,9,0};
var bulunan = from n in sayilar
where n <= 6 orderby n
select n;
6 dan küçük sayıları bularak bunları küçükten büyüğe sıralayan kodumuz bu kadar. Tamamen anlaşılır bir şekilde ve select, from, where kalıbına çok benzer.
string[] names = { "aHmet", "uZuN", "IsTanBul", "bUrSA" ,"AHmet"};
var withLowerUpperLetters = (from n in names
orderby n
select new { Lower = n.ToLower(), Upper = n.ToUpper() }).Distinct();
string sonuc = "";
foreach (var v in withLowerUpperLetters)
{
sonuc += v.Lower + " ";
}
sonuc += "\n";
foreach (var v in withLowerUpperLetters)
{
sonuc += v.Upper + " ";
}
MessageBox.Show(sonuc);
Diziyle verilen isimleri alıp onları büyük ve küçük harflere çeviren LINQ ve devamı. Aynı olan isimleri ikinciye almaz.
son örnek olarak;
string sonuc = "";
int[] sayilar = { 0, 2, 3, 7, 8, 9, 6, 4, 1 };
var numberGroups = from n in sayilar
group n by n % 5 into g
select new { g.Key, numbers = g };
foreach (var g in numberGroups)
{
sonuc += g.Key + " kalanı verenler ";
foreach (var n in g.numbers)
{
sonuc += n+" ";
}
sonuc += "\n";
}
MessageBox.Show(sonuc);
sayilar dizisindeki elemanları 5'e bölümünden kalan sayılarına göre gruplayan LINQ.
Şimdilik bu kadar. LINQ to SQL de görüşmek üzere. Herkese kolay gelsin.
5 Eylül 2008 Cuma
20 Ağustos 2008 Çarşamba
Popüler Programlama Dilleri
Tiobe software ın yaptığı bir araştırma. Popüler programlama dillerini araştırmışlar. Kriterleri de güzel aslında, o dille toplamda kaç satır yazıldığına bakılmamış google,yahoo gibi popüler arama motorları kullanılmış, o dilde yazılmış olan 3rd party yazılımlara ve o dili kullanan dünya çapında bulunan mühendislerin sayıları gibi kavramlar ile dilin popülerliğini artırmışlar.
Listeyi görmek için buraya tıklayın.
Ben ilk gördüğümde çok şaşırdım C ve C++ ilk 4 te fakat C# yok. Ama grafiklerine bakılınca C# yükselişte. Her ay güncelleniyormuş bu liste. İleride ne olacak göreceğiz. Yine de Javanın bu popülerliğini kaybedeceğine inanmıyorum.
Listeyi görmek için buraya tıklayın.
Ben ilk gördüğümde çok şaşırdım C ve C++ ilk 4 te fakat C# yok. Ama grafiklerine bakılınca C# yükselişte. Her ay güncelleniyormuş bu liste. İleride ne olacak göreceğiz. Yine de Javanın bu popülerliğini kaybedeceğine inanmıyorum.
19 Ağustos 2008 Salı
C#'ta Transaction işlemi
Veri tabanından bildiğimiz transaction işlemlerini C# üzerinde veriTabanı bağlantılı projelerimizde de kullanabiliyoruz.
İlk önce nedir bu transaction sen neden bahsediyon kardeşim diyen olur kısaca, veri tabanı üzerinde yaptığımız değişikliklerde bir hata oluşması durumunda veya oluşmaması durumunda :) size kalmış o anda yapılan değişikleri geri alabiliyorsunuz (rollback tran) veya yapılan değişikleri artık veri tabanında gerçek yerine kaydet diyebiliyorsunuz (commit). Çünkü yapılan işlemler ram üzerinde olur commit derseniz veri tabanında ilgili yerlerde güncelleme yapılır rollback derseniz güncelleme yapılmaz eski hali kalır.
sp_calisanSil stored procedure
create proc [dbo].[sp_calisanSil]
@calisanID int
AS
delete from siparisDetaylari where siparisID IN(select siparisID from siparisler where calisanID = @calisanID)
delete from siparisler where calisanID = @calisanID
delete from calisanMemleket where calisanID = @calisanID
delete from calisanlar where calisanID = @calisanID
[C# kodu]
SqlConnection con = new SqlConnection("Data source=.; Initial Catalog=Northwind;Integrated Security=SSPI;");
SqlCommand cmd = new SqlCommand("sp_calisanSil", con);
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
SqlTransaction tr = con.BeginTransaction();
cmd.Transaction = tr;
cmd.Parameters.AddWithValue("@calisanID", int.Parse(txtCalisanID.Text));
try {
cmd.ExecuteNonQuery();
tr.Commit();
}
catch (Exception ex) {
tr.Rollback();
MessageBox.Show(ex.Message);
}
finally {
if (con.State != ConnectionState.Closed)
con.Close();
}
Burada görüldüğü gibi bir çalışanı silmek için ilk önce siparisDetaylari, siparisler, calisanMemleket ve calisanlar tablosundaki silinmek istenen calisana ait bilgiler silinmelidir. Eğer bu sırayı yanlış yaparsak örneğin siparisDetaylari, calisanMemleket, siparisler, calisanlar diye siparisDetaylari ndaki veri silinir calisanMemleket teki veri silinmez ve sp bundan ileriye gitmez hata verir bu şekilde veri bütünlüğü bozulmuş olur. Bizim örneğimizde eğer bu şekilde hata olursa yapılan işlemler geri alınır (tr.Rollback()). Eğer hata oluşmazsa değişikler veri tabanı üzerine yazılır (tr.Commit())
Normal bağlantıdan farkı SqlTransaction nesnesi. Bu nesneyi, connection nesnesi ile transaction başlatıp eşitliyoruz, command nesnesinin transaction özelliğine transaction nesnesini veriyoruz ve gereken yerlerde commit ve rollback kullanıyoruz.
İlk önce nedir bu transaction sen neden bahsediyon kardeşim diyen olur kısaca, veri tabanı üzerinde yaptığımız değişikliklerde bir hata oluşması durumunda veya oluşmaması durumunda :) size kalmış o anda yapılan değişikleri geri alabiliyorsunuz (rollback tran) veya yapılan değişikleri artık veri tabanında gerçek yerine kaydet diyebiliyorsunuz (commit). Çünkü yapılan işlemler ram üzerinde olur commit derseniz veri tabanında ilgili yerlerde güncelleme yapılır rollback derseniz güncelleme yapılmaz eski hali kalır.
sp_calisanSil stored procedure
create proc [dbo].[sp_calisanSil]
@calisanID int
AS
delete from siparisDetaylari where siparisID IN(select siparisID from siparisler where calisanID = @calisanID)
delete from siparisler where calisanID = @calisanID
delete from calisanMemleket where calisanID = @calisanID
delete from calisanlar where calisanID = @calisanID
[C# kodu]
SqlConnection con = new SqlConnection("Data source=.; Initial Catalog=Northwind;Integrated Security=SSPI;");
SqlCommand cmd = new SqlCommand("sp_calisanSil", con);
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
SqlTransaction tr = con.BeginTransaction();
cmd.Transaction = tr;
cmd.Parameters.AddWithValue("@calisanID", int.Parse(txtCalisanID.Text));
try {
cmd.ExecuteNonQuery();
tr.Commit();
}
catch (Exception ex) {
tr.Rollback();
MessageBox.Show(ex.Message);
}
finally {
if (con.State != ConnectionState.Closed)
con.Close();
}
Burada görüldüğü gibi bir çalışanı silmek için ilk önce siparisDetaylari, siparisler, calisanMemleket ve calisanlar tablosundaki silinmek istenen calisana ait bilgiler silinmelidir. Eğer bu sırayı yanlış yaparsak örneğin siparisDetaylari, calisanMemleket, siparisler, calisanlar diye siparisDetaylari ndaki veri silinir calisanMemleket teki veri silinmez ve sp bundan ileriye gitmez hata verir bu şekilde veri bütünlüğü bozulmuş olur. Bizim örneğimizde eğer bu şekilde hata olursa yapılan işlemler geri alınır (tr.Rollback()). Eğer hata oluşmazsa değişikler veri tabanı üzerine yazılır (tr.Commit())
Normal bağlantıdan farkı SqlTransaction nesnesi. Bu nesneyi, connection nesnesi ile transaction başlatıp eşitliyoruz, command nesnesinin transaction özelliğine transaction nesnesini veriyoruz ve gereken yerlerde commit ve rollback kullanıyoruz.
11 Ağustos 2008 Pazartesi
Connection Strings
Where do you want to connect today?
.net kullanıcıları için herhangi bir bağlantı oluştururken ihtiyacı olan bağlantı string lerini buluduran bir site. Çok başarılı. www.connectionstrings.com
.net kullanıcıları için herhangi bir bağlantı oluştururken ihtiyacı olan bağlantı string lerini buluduran bir site. Çok başarılı. www.connectionstrings.com
10 Ağustos 2008 Pazar
Bilgisayar Mühendisi çalışma alanları
Daha önce bir partını paylaşmıştım. Bilal Akçay'ın sitesinden şimdi bilgisayar Mühendisliği ne iş yapar adı altında yazdığı bütün başlıklarını burada paylaşacağım. Gayet güzel ve açıklayıcı yazılar.
Bilgisayar Mühendisi ne yapar?
1-- Yazılım
2-- VeriTabanı yönetimi
3-- Bilişim Güvenliği
4-- Ağ
5-- Donanım
6-- Teknik Destek
7-- Web
8-- Multimedia
9-- Diğer
Bilgisayar Mühendisi ne yapar?
1-- Yazılım
2-- VeriTabanı yönetimi
3-- Bilişim Güvenliği
4-- Ağ
5-- Donanım
6-- Teknik Destek
7-- Web
8-- Multimedia
9-- Diğer
7 Ağustos 2008 Perşembe
F1 Help! C#
C# ta kod yazarken F1 in kullanımıyla ilgili bir örnek yapacağım, çok kolay ama önemli. Yapılan projelerde kullanıcıya bilgi vermek isteyebilirsiniz.
Öncelikle formun HelpButton özelliğini true olarak ayarlayıp kodumuzu da formun HelpRequested event ine yazacağız.
Örnekte mouse ile üzerinde olduğunuz kontrolü F1 tuşuna basarak o kontrolün adını öğrenebilirsiniz. Here is the sample..
Point pt = this.PointToClient(e.MousePos);
Control ctr = GetChildAtPoint(pt);
if (ctr == null) return;
MessageBox.Show("Bu kontrol: " + ctr.Name.ToString());
Bu kadar ;). Ne yapacağım kontrol adını öğrenipte :D
O zaman F1 tuşuna basıldığında program tarafından bir .html sayfası açtırın.
string file = Path.GetFullPath("xxx.html");
Help.ShowHelp(this, file);
Artık bundan sonrası hayal gücüne ve kullanım değişikliğine bakar. Değişik bir sürü şey yaplabilir.
Öncelikle formun HelpButton özelliğini true olarak ayarlayıp kodumuzu da formun HelpRequested event ine yazacağız.
Örnekte mouse ile üzerinde olduğunuz kontrolü F1 tuşuna basarak o kontrolün adını öğrenebilirsiniz. Here is the sample..
Point pt = this.PointToClient(e.MousePos);
Control ctr = GetChildAtPoint(pt);
if (ctr == null) return;
MessageBox.Show("Bu kontrol: " + ctr.Name.ToString());
Bu kadar ;). Ne yapacağım kontrol adını öğrenipte :D
O zaman F1 tuşuna basıldığında program tarafından bir .html sayfası açtırın.
string file = Path.GetFullPath("xxx.html");
Help.ShowHelp(this, file);
Artık bundan sonrası hayal gücüne ve kullanım değişikliğine bakar. Değişik bir sürü şey yaplabilir.
1 Ağustos 2008 Cuma
Kaydol:
Kayıtlar (Atom)






