Visual C#
ASP.NET
ADO.NET
XML
SQL Server
.Net Framework
 

 

 
LINQ Many To Many İlişkiler Saturday, July 12, 2008

Kullanırken tanık olmuşsunuzdur, LINQ içerisinde Many To Many ilişkili olan örneğin :

Products

Orders

[Order Details]

gibi üç tabloyu dbml tarafına çektiğinizde, kullanım açısından bir Siparişin bütün ürünlerine ulaşmak için Order_Details koleksiyonunu kullanmak zorunda kalırsınız. Örnek :

var siparis = nv.Orders.Where(o => o.OrderID == 10248).First();

yukarıdaki kod içerisinde Siparişler içerisinden 5 numaralı olan siparişe konumlanıyoruz. Fakat sipariş üzerinden tek seferde Products kayıtlarına ulaşamıyoruz.

siparis.Products gibi bir kod yazma şansımız yok çünkü arada [Order Details] tablosu bulunmakta.

Bunu aşabilmek için Orders ve Products class'ına ufak bir property tanımlamanız yeterli :

public IEnumerable<Order> Orders{

get

{

return Order_Details.Select(od => od.Order);

}

}

yukarıdaki property'yi Product class'ına aşağıdaki property'yi ise Order class'ına ekliyoruz.

public IEnumerable<Product> Products

{

get

{

return Order_Details.Select(od => od.Product);

}

}

Bu işlemin sonucunda artık kod içerisinde aşağıdaki kodu yazarak Many To Many ilişkili class'ları olması gerektiği gibi kullanabiliyorsunuz :

var siparis = nv.Orders.Where(o => o.OrderID == 10248).First();dgProduct.DataSource = siparis.Products.ToList();

veya

var urun = nv.Products.Where(o => o.ProductID == 5).First();dcOrder.DataSource = urun.Orders.ToList();

WebBrowser kontrolü içerisinde office dökümanlarını açmak Wednesday, July 09, 2008

Kendi geliştirdiğiniz windows forms uygulamaları içerisinde, webbrowser kontrolü aracılığı ile bir office dökümanı açmak isterseniz aşağıdaki gibi bir kod işinize yarayacaktır :

webBrowser1.Navigate("Dökümanın path bilgisi");

Fakat bu kod sonucunda eğer döküman bir word dosyası ise Microsoft Word'ün eğer başka bir office uygulamasına ait ise o uygulamanın açıldığını ve sizin webbrowser kontrolünüzün boş kaldığını görürsünüz. Özetle dökümanın tamamen sizin kontrolünüzün içerisinde açılması için aşağıdaki Registry ayarlarını yapmanız gerekmektedir. Fakat bu dosya içerisindeki atamaların çok dikkatli yapılması gerektiğinden ilk önce bir full Registry backup almanızı öneriyorum. Problem çıkarsa hemen geri dönmeniz için :)

Registry ayarları :

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.Document.8]
"BrowserFlags"=dword:80000024

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.RTF.8]
"BrowserFlags"=dword:80000024

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.Document.12]
"BrowserFlags"=dword:80000024

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.DocumentMacroEnabled.12]
"BrowserFlags"=dword:80000024

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Sheet.8]
"BrowserFlags"=dword:80000A00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Sheet.12]
"BrowserFlags"=dword:80000A00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.SheetMacroEnabled.12]
"BrowserFlags"=dword:80000A00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.SheetBinaryMacroEnabled.12]
"BrowserFlags"=dword:80000A00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.Show.8]
"BrowserFlags"=dword:800000A0

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.Show.12]
"BrowserFlags"=dword:800000A0

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.ShowMacroEnabled.12]
"BrowserFlags"=dword:800000A0

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.SlideShow.8]
"BrowserFlags"=dword:800000A0

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.SlideShow.12]
"BrowserFlags"=dword:800000A0

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.SlideShowMacroEnabled.12]
"BrowserFlags"=dword:800000A0

Not: Bu kodları kopyalayıp bir txt belgeye yapıştırın. Dosyayı reg uzantısı ile kayıt edin ve sonrada dökümanı çalıştırın. İşlem tamam :)

İnternet Explorer içerisindeki URL listesi Saturday, July 05, 2008

İnternet explorer içerisinde yazmış olduğunuz URL bilgilerini otomatik tamamlayan listeye ulaşmak için Registry içerisinden aşağıdaki yolu kullanabilirsiniz :

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs

:)

HTML'de kullanılan karakter kodları Saturday, June 28, 2008

Bu kodlara her ihtiyaç duyduğumda google'a başvurmaktan sıkıldım :)

ğ : &#287;
Ğ : &#286;
ı : &#305;
İ : &#304;
ş : &#351;
Ş : &#350;
ü:&#252;
Ü:&#220;
Ö:&#214;
ö:&#246;
T-SQL 'de içinde bulunduğunuz ayın ismini almak Sunday, June 15, 2008

SELECT DATENAME(month, GETDATE())

ifadesi size T-SQL de içinde bulunduğunuz ayın ismini dönecektir.

month ifadesi yerine day veya year yazmak ise geriye gün veya yılı dönecektir.

LINQ çalışma mantığı Tuesday, June 03, 2008

LINQ ile çalışırken aşağıdaki gibi bir kodda hata foreach satırında gelecektir

ArrayList arrayList = new ArrayList ();

arrayList.Add(45);

arrayList.Add("26");

arrayList.Add(13);

IEnumerable<int> names = arrayList.Cast<int>();

foreach (int name in names)

Console.WriteLine(name);

Halbuki hatanın IEnumerable<int> iteratörünün oluşturulduğu satırda dönmesi gerektiğini düşünürüz.

Hatanın foreach içerisinde geliyor olmasının sebebi, LINQ'in bu tip işlemlerde sadece hazırlama işlemini uyguluyor ve kodu çalıştırmıyor olmasıdır.

Kodun çalıştırılması foreach satırı ile birlikte gerçekleşecektir. Yani LINQ, eğer sorgunun içerisinde select veya where ifadeleri görmez ise sadece tanımlama yapıp çağırım yapıyor.

Ne zaman sonuc içerisinden bir değere erişilmek istenirse o zaman kod çalıştırılıyor.

Ufak bir dipnot :)

LINQ - Cast ile OfType arasındaki fark nedir ? Tuesday, June 03, 2008

What is difference between Cast and OfType operators ?

Bu iki operatör arasındaki fark çok ufak gibi görünse de aslında büyük ve önemlidir.

Cast operatörü verilen koleksiyon içerisindeki tüm elementleri dönüştürmeye çalışır ve dönüştüremediği bir element bulur ise bir exception fırlatır. OfType ise buna karşılık bu elementlerden sadece dönüştürülebilenleri işleme sokar. Örnek olarak aşağıdaki kod foreach satırında hata verecektir.

ArrayList arrayList = new ArrayList();

arrayList.Add(45);

arrayList.Add("26");

arrayList.Add(13);

IEnumerable<int> names = arrayList.Cast<int>();

foreach (int name in names)

Console.WriteLine(name);

 

Ama aşağıdaki kod hata üretmeyecektir ve çıktısı

45

13

olacaktır :)

ArrayList arrayList = new ArrayList();

arrayList.Add(45);

arrayList.Add("26");

arrayList.Add(13);

IEnumerable<int> names2 = arrayList.OfType<int>();

foreach (int name in names2)

Console.WriteLine(name);

ADO.NET Entity Framework Beta 3 yayınlandı... Tuesday, May 27, 2008

ADO.NET Entity Framework Beta 3 birçok eklenti ile birlikte yayınlandı. Bu eklentilerin içerisinde Visual Studio 2008 RTM ile görsel modelleme yapabilme ve düzeltilen hatalar, performans iyileştirmeleri gibi birçok detay bulunuyor.

Eklenenler :

Performance improvements

  • Much quicker object query execution
  • Simpler generated SQL
  • Faster view generation

Easier disconnected operation

  • Public, serializable EntityKey property on EntityReference
  • ApplyPropertyChanges
  • Attach on EntityReference
  • Improvements to EntityKey serialization
Extensibility and business logic enhancements
  • Partial methods in code generation for property changing and property changed events
  • Load with MergeOption

Query improvements

  • Additional canonical functions for LINQ to Entities
  • Apply operator elimination (makes more operations work in SQL Server 2000 and other databases)
  • Compiled LINQ query
  • ToTraceString() method on ObjectQuery<T> and EntityCommand to facilitate debugging

ve diğerleri :)

  • Connection management refinements
  • Provider interface allows better reasoning about primitive types
What was the world's first spam email? Monday, May 26, 2008

İnternette gezinirken rastladığım ufak bir bilgiyi paylaşmak istiyorum :)

The first spam email was sent on May 01 1978 by a DEC marketing representative to every ARPANET address on the west coast of the United States

Enterprise Library 4.0 - May 2008 Monday, May 26, 2008

Enterprise Library 4.0 yayınlandı. Enterprise Library sevenlere duyurulur :)

Visual Studio 2008'e özel olması Enterprise Library'nin biraz daha ilgi çekici olmasına sebep oluyor

.NET Framework kaynak kodları Wednesday, May 21, 2008

Visual Studio 2008 ile birlikte .NET Framework kaynak kodları üzerinde debug yapabiliyorsunuz. Nasıl yapılacağını öğrenmek için buradaki linkte bulunan adımları uygulayabilir ve sonuçlarından faydalanabilirsiniz :)

 

Sql Server ve İzinler Sunday, April 06, 2008

Sql Server üzerinde bir kullanıcıya database rollerinden sadece dataya yazma izni (db_datawriter) verildiğinde ve okuma izni verilmediğinde (db_datareader) delete ve update sorgularında dikkat etmeniz gereken bazı noktalar oluşur.

Örneğin kullanıcı aşağıdaki sorguyu çalıştırabilirken:

Delete from <table_name>

aşağıdaki sorguyu çalıştıramayacaktır.

Delete from <table_name> where <koşul>

çünkü ikinci sorgu içerisinde select işlemi yapılmaktadır. Aynı kural update sorgularında da geçerlidir. Aman dikkat :)

Adding Item to Windows right click context menu - Windows'un sağ klik menüsüne eleman eklemek Saturday, January 05, 2008

Windows'da herhangi bir dosyanın üzerine gelip sağ klik yaptığınızda açılan menüye kendi programınızı çalıştıran bir menü elemanı yerleştirmek isterseniz yapmanız gereken şey basit

Öncelikle Registry programınızı açın daha sonra:

1 - HKEY_CLASSES_ROOT\* key ini seçin.
2 - İçerisindeki shell key ini açın.
3 - Buraya istediğiniz isimde bir key oluşturun. Bu isim sağ klik menüde görünecek.
4 - Altına command isminde bir key daha oluşturun.
5 - Command'ın içindeki Default'a çift klik yapın ve Value alanına kendi programınızın tam yol bilgisini yazın. Bunu yaptığınız anda sağ klik menüde belirttiğiniz isimde bir eleman görünecektir. Bu elemanı seçtiğinizde de sizin programınız başlatılacak.
6 - Eğer programınız hangi dosya üzerinde sağ klik yapılarak çalıştırıldı bunu öğrenmek istiyorsanız biraz önce değiştirmiş olduğunuz Default'un değerini

<program tam yol bilgisi> %1

şeklinde yazarsanız dosya ismi programınıza parametre olarak gönderilecektir.

İyi çalışmalar

Ajax UpdatePanel, Wizard, Validators ve Microsoft JScript runtime error: 'null' is null or not an object hatası Saturday, November 17, 2007

VS ile çalışırken Ajax ve Wizard kullanımı sırasında yaşadığım bir problemden bahsetmek istiyorum.

Eğer bir Wizard içerisinde Validator kullanırsanız, belirtilen hatayı almanız muhtemeldir. Konuyu araştırdığımda bu problemin sadece IE'ye özel olduğunu başka tarayıcılarda bu hatanın çıkmadığını öğrendim ve açıkçası birazda şaşırdım :)

Hatanın çözümü olarak Wizard içerisinde ki validator kontrollerinizi ve validator'lara bağlı olan kontrollerinizi aynı ValidationGroup ataması ile güncellemelisiniz.

Örneğin Step 1 dekilerin hepsini Sayfa 1 olarak değiştirin eğer var ise diğerlerini sayfa başına gruplandırın. Sorun bu şekilde çözülmekte :)

Bu konunun tartışıldığı forumu incelemek için buraya tıklayabilirsiniz.

İyi çalışmalar

Method Overloading in XML Web Services Wednesday, October 03, 2007

Method overloading XML Web Servislerinde default olarak desteklenmemektedir. Fakat bu işlemi uygulayabilmemiz için özel bir attribute bildirimi yapılabilmektedir. MessageName isimli attribute ile web servislerinde method overloading uygulayabiliyorsunuz. Bu noktada karşınıza eğer 2.0 veya üstü bir Framework versiyonu ile çalışıyorsanız,

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

satırından kaynaklanan bir hata alırsınız. Hata web servis içeriğinin BasicProfile1_1 kurallarına uymadığı ile ilgilidir. Bu satırın anlamı :

Yazmış olduğunuz web servisin Web Services Interopability Organization's (WS-I) Baisc Profile 1.1 standartlarına uyması gerekliliğidir. Bu standartlardan bir tanesi ise web servislerin metot overloading e uymaması daha açık bir ifade ile, metot isimlerinde unique kuralının arandığıdır. Bu hatayı düzeltmenin yolu ya o satırı silmek ki pek fazla tercih etmediğimiz bir yoldur :)  Bir diğer yol ise attribute bilgisini aşağıdaki gibi değiştirmektir.

[WebServiceBinding(ConformsTo = WsiProfiles.None)]

İyi çalışmalar

Imagine Cup 08 Wednesday, October 03, 2007

Imagine Cup 2008 bu senede yazılım sektöründe çok önemli yer tutacak. Bu sene içerik "sürdürülebilir çevre için, teknolojinin kullanıldığı bir dünya düşleyin" olarak belirlendi. Her sene olduğu gibi bu sene de yakından takip etmenizi öneriyorum :) Detaylı bilgiye buradan erişebilirsiniz

C# ile internet uzerinden dosya indirmek [ File Download in Windows Applications] Friday, September 28, 2007

C# ile Windows, Mobile uygulamalarinda internet uzerinden dosya indirmek (File Download)


Windows form projeniz de formun üzerinde

URL bilgisi için bir textBox : txtUrl,

indirilen dosyanın nereye yazılacağı hakkında ise bir diğer textbox : txtHedef

olduğunu varsayalım. Aşağıdaki kod parçası internet üzerinden dosya transfer etmenizi sağlayacaktır.

 

Not : Eğer bir proxy server kullanıyorsanız o zaman WebProxy sınıfı aracılığı ile internete çıkış sağlamalısınız.WebProxy kodlarını aşağıdaki linkte bulabilirsiniz :

http://www.boraburgucugil.com/blog.aspx?bId=15

WebRequest req = WebRequest.Create(txtUrl.Text);

HttpWebResponse cevap = (HttpWebResponse)req.GetResponse();

Stream akim = cevap.GetResponseStream();

FileStream yaz = new FileStream(txtHedef.Text + "\\" + Path.GetFileName(txtUrl.Text), FileMode.Create);

BinaryReader okuyucu = new BinaryReader(akim);

BinaryWriter yazici = new BinaryWriter(yaz);

try

{

while (true)

{

yazici.Write(okuyucu.ReadByte());

}

}

catch

{

}

finally

{

yaz.Close();

okuyucu.Close();

yazici.Close();

}

MessageBox.Show("Download Complete");

C# ile Windows, Mobile uygulamalarda proxy üzerinden internete çıkış sağlamak Friday, September 28, 2007

Eğer projenizin çalıştığı ağ internete bir proxy server aracılığı ile çıkıyorsa sizin programınızın da internet explorer daki ayarları uygulaması gerekir. Örnek

WebProxy wp = new WebProxy(txtSunucu.Text, Convert.ToInt32(txtPort.Text));

wp.Credentials = new System.Net.NetworkCredential(txtKullaniciAdi.Text, txtSifre.Text, txtDomain.Text);

HttpWebRequest.DefaultWebProxy = wp;

kullanıcıdan proxy server bilgisini ve port numarasını almalısınız. Bir de Proxy server üzerinde yetki sahibi bir kullanıcı adı, şifre ve domain ismini programa tanıtmalısınız.

Not : Eğer kullanıcı adında domain bilgisi geçiyor ise

Örn : kullaniciadi@myDomain.com gibi

credential bildirimini aşağıdaki gibi yapmalısınız :

wp.Credentials = new System.Net.NetworkCredential(txtKullaniciAdi.Text, txtSifre.Text);

 

XML Web Services Thursday, September 27, 2007

XML Web Servisleri içerisinde kullanılan WebMethod lara verilen Attribute ler ile ilgili kısa açıklamalar :

WebServis1.jpg

BufferResponse : Web Servislerde default olarak true degerine sahip olan bu özellik Web Servis den kullanıcılara gönderilecek olan cevap öncelikle önbelleklensin sonra mı gönderilsin yoksa önbellekleme yapılmadan gönderilsin mi, bunun kararını verir. Gönderilen cevabın önbelleklenmesi mesajın bütününün hazırlanması ve sonra gönderilmesi anlamındadır.

 

CacheDuration : CacheDuration özelliği ASP.NET sitelerinden alışık olduğumuz önbellekleme yani cache işlemi için geçerlidir. Saniye cinsinden bir parametre ister.

[WebMethod(CacheDuration=120)] gibi

Yukarıda ki bildirim de web servis metotu 2 dakika boyunca kullanıcılara aynı cevabı verecektir. Ufak bir açıklama, gelen her parametre degerine göre ayrı bir cache otomatik olarak oluşturulacaktır.

 

Description: Açıklamaya gerek var mı J

 

EnableSession : Default değeri false olan bu özelliğin amacı webmethod içerisinde Session isimli nesnenin kullanılabilmesini sağlamaktır. Fakat bu özellikten faydalanırken Web Servislerinde ki stateless yapıdan dolayı Client uygulama üzerinde CookieContainer kullanılmalıdır. Örnek için bkz :

http://www.yazilimuzmani.com/Articles/Details.aspx?aId=1000000438

 

MessageName : MessageName özelliği ise Webservisler de Metot overloading yapmak istediginizde kullanmak zorunda kalacağınız bir özelliktir. Web Servisler de bir metotu overload ederseniz kurallara uygun olsa dahi, MessageName özelliğinin kullanılması gerektiğine dair bir hata alacaksınız. O yüzden kullanım aşağıdaki gibi olmalıdır.

    [WebMethod(MessageName="HelloWorldSimple")]

    public string HelloWorld() {

        return "Hello World";

    }

 

    [WebMethod(MessageName="HelloWorldAdvanced")]

    public string HelloWorld(string name)

    {

        return "Hello " + name;

    }

 

TransactionOption : Web Servislere Transaction özelliğinin eklenmesi ile birlikte artık COM+ mantığına yakın bir şekilde Transaction yönetimi yapabiliyorsunuz.

[WebMethod(TransactionOption = TransactionOption.RequiresNew)]

OpenCD-Rom Drive Saturday, September 15, 2007

API ile CD-ROM kapağını açmak için gerekli olan ufak kod parçası aşağıdadır.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Runtime.InteropServices;

namespace OpenCDROM_API

{

   public partial class Form1 : Form

   {

      [DllImport("winmm.dll")]

       static extern Int32 mciSendString(String command,

         StringBuilder buffer, Int32 bufferSize, IntPtr hwndCallback);

      public Form1()

      {

               InitializeComponent();

      }

      public void OpenCD()

      {

            IntPtr ptr = IntPtr.Zero;

            StringBuilder returnstring = new StringBuilder();

            mciSendString("set CDAudio door open", returnstring, 127, IntPtr.Zero);

      }

      private void Form1_Load(object sender, EventArgs e)

      {

               this.OpenCD();

      }

   }

}

 

İyi çalışmalar

Visual Studio 2008 Ajax Enabled Web Site Thursday, September 06, 2007

Herkese merhaba,
VS 2008 ile birlikte artık Ajax Enabled Web Site şablonu kaldırıldı. Sebep ise VS 2008 in Ajax ile tam destek halinde geliyor olması.

Artık normal bir ASP.NET Web Site açıyorsunuz ve sitenize Add New Item diyerek

  • Ajax Web Form
  • Ajax Master Page
  • Ajax Client Control
  • Ajax Client Library
  • Ajax Enabled WCF Service

geliştirebiliyorsunuz.

İyi çalışmalar

C# 3.0 Specification Friday, August 31, 2007

C# 3.0 ile ilgili specification dökümanına buradan erişebilirsiniz.

Web sitenize icon ekleyin Friday, August 31, 2007

Geliştirmiş olduğunuz web sitenize internet explorer üzerinde icon eklemek için yapmanız gereken tek şey

<link rel="SHORTCUT ICON" href="images/myIcon.ico"/>

bildirimini sayfanızın html kodları arasına yerleştirmek :)

Ayrıntılı bilgi için :

 http://msdn2.microsoft.com/en-us/library/ms537656.aspx

Visual Studio 2008 Beta 2 ve Ajax 1.0 Friday, August 31, 2007

Herkese merhaba,
Microsoft Visual Studio Beta 2 versiyonunu