28 Temmuz 2009 Salı

C# Dataset Bilgi Okumak

Datasetden bil okumak bilindiği gibi sorunlu bir işlem öncelikle datasetin hangi tablosundan hangi sutunu okuyacağımızı bilmeliyiz.

DataSet dsID = new DataSet();
dsID = obj.TakeCustomerEquipmentCustomerIDGetEquipmentMasterNameCustomerEquipmentID(intcustomerID);
ArrayList aryEquipmentID = new ArrayList();
foreach (DataRow dtr in dsID.Tables[0].Rows)
{
foreach (DataColumn c in dsID.Tables[0].Columns)
{
aryEquipmentID.Add(dtr[c.ColumnName]);
}
}


dataset ilk tablosunun satırlarında gezerek sutun sutun yazdırılıyor.Eğer Datasetin aldığınız sorgular birden fazla sutun içeriyorsa ArrayList giderek belli bir moddaki verileri filitre etmelisiniz. Örneğin 3 tane eğer kolumunuz varsa ve ilki ID tablosunda geliyorsa Araylist içeriği
0 ID
1
2
3 ID
4
5
6 ID
şeklinde gelen kayıtlardan oluşacak
neyseki benim TakeCustomerEquipmentCustomerIDGetEquipmentMasterNameCustomerEquipmentID güzel fonksiyonum tek bir sutundan oluşuyor.Tekrar yukarıdaki kodu filitreleme gerek yok.

23 Temmuz 2009 Perşembe

String birleştirme

C# da string birleştirme + operatörüyle
VB de ise & ile yapılma

C# da bir örnek

string strcode = "";
strcode = strcustomercode + "-" + intyear.ToString() + "-" + intCountratTotalCount + "-" + ContractType.Properties.Value.ToString();
ContractNumber.Properties.Value = strcode;

C# Tarih Farkı (Date Diff)

C# da hep datihfarkı_sontarih-ilktarih gibi bir işlemi yapmak istemişimdir.Bu işlem bukadar kolay olmasada

diffResult =dtTodayMidnight -dtTodayNoon gibi bir işlemi yapan C# kodu aşağıda var.


using System;
using System.Collections.Generic;
using System.Text;

namespace Console_DateTime
{
class Program
{
static void Main(string[] args)
{
System.DateTime dtTodayNoon = new System.DateTime(2006, 9, 13, 12, 0, 0);
System.DateTime dtTodayMidnight = new System.DateTime(2006, 9, 13, 0, 0, 0);
System.TimeSpan diffResult = dtTodayNoon.Subtract(dtYestMidnight);
Console.WriteLine("Yesterday Midnight - Today Noon = " + diffResult.Days);
Console.WriteLine("Yesterday Midnight - Today Noon = " + diffResult.TotalDays);
Console.ReadLine();
}
}
}
Çıktı:

19 Temmuz 2009 Pazar

Regular Expression Nedir?

Regular Expression, veriler içinde, istediğinize göre belirleyebileceğimiz kompleks sözdizimine sahip ifadeleri bulmak için kullanılan bir tekniktir. Bu teknik bir string içinde başka bir string bulmamıza ve istersek değiştirmemize yarar. Sözdizimi oluşturmak için kullanabileceğimiz birkaç yöntem vardır:
- Karakter Uyuşması
- Tekrarlanma Uyuşması
- Pozisyon uyuşması

1. Karakter Uyuşması: Belirlediğimz karakterlerin string içinde aramamıza yarar.
Örnek:
dogma

Başka bir örnek:
d.gma

"Nokta" karakteri, Regular Expression içinde özel bir karakterdir ve herhangi bir karakter yerine geçebilir. Yani yukarıdaki ifade
dAgma dBgma d9gma dogma d0gma..
ifadelerini çağırır.

Burada "Nokta" ile her karakteri arayacağımız gibi istediğimiz karakterler içinde arama yapılmasını da sağlayabiliriz:
[1234]dogma
Sonuç:
1dogma, 2dogma, 3dogma, 4dogma

Bunu bir diziye dökecek olursak:
[1-9]dogma
Sonuç:
1dogma, 2dogma,...,8dogma, 9dogma

Tabi burada rakam yerine harf de kullanabiliriz:
[a-d]dogma
Sonuç:
adogma, bdogma, cdogma, ddogma

2. Tekrarlanma Uyuşması: Regular Expression'ın derinleme araştırma yaparak gücünü gösterdiği bölümdür.
Örneğin dogm ve dogma çıktısını istiyoruz. Bunun için başka bir özel karakter kullanmalıyız: "Soru İşareti"
dogma?

Sonuç:
dogm, dogma

Soru işareti, soru işaretinin sıfır ve bir solundaki karakterler düşürülerek araştırılır.

Peki "dogma?" veya "dogma.?" şeklinde çıktı istiyorsak ne yapmalıyız? Kelimesi kelimesine arama için özel karakterlerden hemen önce bir ters bölü işareti (\) koymalıyız.
Yani dogma\?
Sonuç sadece dogma? değerini döndürür.

Diğer bir özel karakter yıldız işaretidir (*, asteriks). Bir önceki karakterle uyuşan sonuçlar çıkarır.
Örnek:
dogma*

Sonuç:
dogma, dogmaa, dogmaaaaaaa...

Burada son harfin değil bir grubun tekrarlanmasını istiyorsanız parantez kullanabilirsiniz.
Örnek:
dog(ma)*

Sonuç:
dogma, dogmama, dogmamamama...

Burada "ma" ifadesinin tekrar sayısı sınırsızdır. İfadenin kaç kere tekrar edileceğini de sınırlayabilirsiniz.
Örnek:
do{3}gma

Sonuç:
dooogma

Kısaca özel karakterlerin anlamları: \ ( ) [ { ^ $ * + ? . < >
\ : Özel karakterleri normak karakter olarak kullanabilmemizi sağlar.
: Veya anlamına gelir: "[htf]tp:" Çıktısı http: veya ftp: olur.
( : Grup başlatır.
] : Grup sonlandırır.
[ : Diziler oluşturmamızı sağlar. [A-Z]
{ : Tekrar sayısı belirmebilmemizi sağlar.
^ : Aranan ifadenin, string içinde en başta aranmasını sağlar.
$ : Aranan ifadenin, string içinde en sonda aranmasını sağlar.
* : 0 ya da daha fazla ifadeyi string içinde arar.
+ : 1 ya da daha fazla ifadeyi string içinde arar.
? : Kendinden önceki bir ifadeyi düşürerek arama yapar.
. : Kendi bulunduğu yere herhangi bir karakter koyarak arama yapar
< : İfadenin, string içinde tam olarak geçmesini sağlar:


3. Pozisyon Uyuşması: Aranılan ifadenin string içindeki yerini de belirlememizi sağlar.
İfadenin, string içinde en başta olmasını istiyorsak başına ^ koymamız gerekir.
Örnek:
^dogma
Burada, string dogma ile başlıyorsa sonuç başarılıdır.

Eğer string içinde en sonda olmasını istiyorsak sonuna $ koymalıyız.
Örnek:
dogma$
Burada da, string dogma ile bitiyorsa sonuç başarılıdır.

Sık Kullanılan uygulamalar için bazı hazır diziler geliştirilmiştir:
\d = [0-9]
\D = [^0-9]
\w = [a-zA-Z0-9]
\W = [^a-zA-Z0-9]
\s = [ \t\n\r\f]
\S = [^ \t\n\r\f]



Artık Regular Expression konusunun temelini biliyoruz. Aşağıdaki örnekler yardımıyla kendi sözdiziminizi yazarak kendi kontrollerinizi oluşturabilirsiniz.

Telefon Numarası Doğrulama:
0(XXX)-XXX-XX-XX

Aradığımız karakterler:
Sıfır Parantez Açma 3 Adet Rakam Parantez Kapama Çizgi 3 Adet Rakam Çizgi 2 Adet Rakam Çizgi 2 Adet Rakam

Regular Expression:
0\([0-9]{3}\)-[0-9]{3}-[0-9]{2}-[0-9]{2}

Şimdi teker teker ifadeleri açıklayalım:
0 : Numarada aranan sabit karakter.
\( : Parantez açıyoruz ancak parantez özel karakter olduğundan önüne bir ters bölü işareti koyuyoruz. (Parantez, gruplama da kullanlan özel karakterdir)
[0-9]{3} : Sıfırdan dokuza kadar olan karakterler üç defa bulunacak.
\) : Parantezi kapatıyoruz. Artık başındaki ters bölüyü anlatmama gerek yok sanırım.
- : Numarada aranan sabit karakter.
[0-9]{3} : Sıfırdan dokuza kadar olan karakterler üç defa bulunacak.
- : Numarada aranan sabit karakter.
[0-9]{2} : Sıfırdan dokuza kadar olan karakterler iki defa bulunacak.
- : Numarada aranan sabit karakter.
[0-9]{2} : Sıfırdan dokuza kadar olan karakterler iki defa bulunacak.


--------------------------------------------------------------------------------


--------------------------------------------------------------------------------

Mail Adresi Kontrolü içinde şu ifadeyi kullanabilirsiniz:
[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+

C# ile Web sayfası bilgilerini almak

asp.net yada php gibi modern diller sunucuda çalışarak bilgilere üretir.üretilen bilgilerde html olarak görüntülenir.Html bilgileri almak kolaydır fakat bir asp.net kodunu sunucudan almak pratikde imkansızdır (mimari izin vermez) fakat bir web sayfasının o anki görüntüsünü alabilir.
Web sitesi üzerinde önemli işlemler yapabiliriz.
aşağıda ki kod sozluk sitesine bağlanır ve sitenin html bilgilerini bize sunar.
using System.Net;
using System.IO;

-----
string URL = "http://www.sozluk.com";
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
myRequest.Method = "GET";
WebResponse myResponse = myRequest.GetResponse();
StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
string result = sr.ReadToEnd();
sr.Close();
myResponse.Close();
textBox1.Text = GetWebPageTitle("http://www.sozluk.com");

14 Temmuz 2009 Salı

INSERT INTO SELECT

Kim SQL kullanarak bir tablodaki verilerini başka tabloya kopyalamak istemez.Tabiki kopyalanacak veri tiplerinin uyumlu olması kaçınılmaz.
insert into tablo1 (val1,val2) Values('deg1','deg2') şeklindeki standart kullanımdan biraz farklı olarak values yerine yeni bir select sorgusu getirerek dönen değerlerin tabloya eklenmesi sağlanır.
insert into mla_Rev (LanguageID, AppID) select LanguageID, AppID FROM mla_Rev WHERE (RevID = 8)"

C# Stored Procedure Eklenen Kaydın Değerini Almak

Senaryo: Bir Kayıt eklediniz.ve eklenen kaydın id numarasını alarak başka işler yapacaksınız.Peki nasıl alırsınız bu değeri.Stored Procedure kullanarak.

öncelikle Stored Procedure
insert sorgusunda bir değişiklik yapmalıyız

CREATE PROCEDURE SPISIMKAYIT
@dSupplierName varchar(50),
@dSupplierAddress varchar(50),
@dSupplierTel nchar(10),

@ID int out
AS
insert into tbSuppliers (SupplierName,
SupplierAddress,SupplierTel)values
(@dSupplierName,@dSupplierAddress
,@dSupplierTel)SET @ID = SCOPE_IDENTITY()


hazırlamış olduğumuz Stored Procedure oluşturduk. Peki C# nasıl geri dönecek bu zımbırtı.
public int InsertSupplier()
{
SqlCommand cmd = new SqlCommand("Supplier_Add");
cmd.Parameters.Add("@dSupplierName", SqlDbType.VarChar).Value = supplier.SupplierName;
cmd.Parameters.Add("@dSupplierAddress", SqlDbType.VarChar).Value = supplier.SupplierAddress;
cmd.Parameters.Add("@dSupplierTel", SqlDbType.VarChar).Value = supplier.SupplierTel;
cmd.Parameters.Add("@ID", SqlDbType.Int).Direction = ParameterDirection.Output;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = Connections.Connection();
Connections.Open();
cmd.ExecuteScalar();
int sonid = Convert.ToInt32(cmd.Parameters["@ID"].Value);
return sonid;
}

işte böylede geri dönerek eklediğimiz kaydın id'si