23 Aralık 2009 Çarşamba

DevExpress ile xtraGrid'te seçili Row değerini array olarak alma.



object[] selectedRow = ((System.Data.DataRowView)
((DevExpress.XtraGrid.Views.Grid.GridView)xtraGridDetailView.MainView).GetFocusedRow()).Row.ItemArray as object[];

Bu kod parçasıyla devEx xtraGrid de seçilen satırı selectedRow object arrayine atıyoruz.

Sql Server da Bulk Insert nedir?

Kısacası metin dosyalarının SQL Server'a aktarmanın en kolay yoludur. Bunu yapmanız için bilmeniz gereken ufak tefek ayrıntıdan başka bir şey yok.

Sıralamak gerekirse,

-Metin dosyasının uzantısını
-Kolonlar birbirinden hangi karakterle ayrılıyor
-Satır sonları nasıl belirlenmiş bilmemiz yeterli.

Bulk Insert komutu ise

BULK INSERT TableName FROM  'Path(DosyaYolu)' WITH (FIELDTEMINATOR = ',')


FIELDTERMINATOR - ile metin dosyamızda bulunan kayıtların kolonlara ayrılmak istenildiğinde hangi karakterle ayırma işlemi yapılacak olduğunu belirtliğimiz yerdir.

Ufak bir örnek yaparak deneme yapacak olursak bunun için hemen bir tablo oluşturalım.

CREATE TABLE User
(
id int,
Name nvarchar(50),
LastName  nvarchar(50),
Age int,
City nvarchar(50),
)

Sql tablomuzuda oluşturduk ya metin dosyamız??? Onuda basit bir şekilde yazıyorum hemen.
Mesela buda C klasörünün altında Users.txt metin dosyamız olsun.

1$Ali$Alioğlu$18$Istanbul
2$Veli$Velioğlu$19$Bursa
3$Ahmet$Ahmetoğlu$20$malatya
4$Mehmet$Mehmetoğlu$21$Edirne


BULK INSERT User FROM  'C:\Users.txt' WITH (FIELDTEMINATOR = '$')


--Dolar ($) kullandım. Çünkü text içerisinde kullanılabilecek karakterden uzak durdum. İşimi garantiye aldım.


Bu şekilde hdd mizde bulunan bir txt dosyasını SQL de oluşturduğumuz bir tabloya taşımız bulunuyoruz.
Ama burada önemli nokta taşıma esnasında türkçe karakter sorunu yaşıyor olacağımızdır. Bunun çözümüde çok basit Bulk Insert komutumuza CODEPAGE = '1254' eklememiz yeterli olucak.

Şu şekilde kullanıcaz yani
BULK INSERT User FROM  'C:\Users.txt' WITH (FIELDTEMINATOR = '$' , CODEPAGE = '1254' )


Bu işlemleri sırasıyla yaptık ama birden karşımıza

You do not have permission to use the bulk load statement.


Bu durum Bulk Insert yetkinizin olmasından kaynaklanıyor. sysadmin veya bulkadmin rollerinize sahip olursanız bu hatayıda basitçe geçiceksiniz.






22 Aralık 2009 Salı

Sql Server da Case - When yapısı

Sql cümlelerimizde belirli durumlar (koşullar) karşısında farklı işlemler yapmak istiyorsak Case - When yapısını kullanabiliriz.
Yapı Oldukça basit

Kullanım:

CASE
WHEN Koşul_1 THEN Koşul_1 gerçekleştiğinde yapılacaklar
WHEN Koşul_2 THEN Koşul_2  gerçekleştiğinde yapılacaklar
WHEN Koşul_3 THEN Koşul_3  gerçekleştiğinde yapılacaklar
ELSE (bu belirtilen 3 durumun gerçekleşmemesi durumunda yapılacaklar)
END

Örnek:


SELECT Name, LastName
CASE Gender
WHEN 'F' THEN 'Female'
WHEN 'M' THEN 'Male'
END AS Gender FROM Users


21 Aralık 2009 Pazartesi

ContextSwitchDeadlock was detected durumu

Hata: 
" CLR, 60 saniye içinde 0x46fae0 COM içeriğinden 0x46fc50 COM içeriğine geçemedi. Hedef içeriğe/gruba sahip olan iş parçacığı büyük olasılıkla pompalamayan bekleme yapıyor veya Windows iletileri pompalamadan çok uzun süreyle çalışan bir işlemi işliyor. Bu durum performansı genellikle kötü etkiler ve uygulamanın yanıt vermemesine veya bellek kullanımının zaman içinde sürekli artmasına neden olabilir. Bu sorunu önlemek için, tüm tek iş parçacıklı (STA) grup iş parçacıklarının bekleme komutları (örn. CoWaitForMultipleHandles) pompalaması ve uzun süre çalışan işlemler sırasında da düzenli olarak ileti pompalaması gerekir. "

Çözüm:
Debug >> Exceptions >> Managed Debug Assistants burada bulunan ContextSwitchDeadlock check'i kaldırın. Bu hatayı ayrıca  Release aşamasında almıyorsunuz bunuda belirtmek isterim.

11 Aralık 2009 Cuma

SQL Server ile Stored Procedure

Stored Procedure Nedir?

Stored Procedure aslına bakıcak olursak kendi database server'da saklanan SQL ifadeleri olarak düşünebilir. Bir programlama dilinde fonksiyonların parametre alması gibi, stored procedureler de parametre alabilir. Bu parametrelerle bir sorgu çalıştırıp cevap geri gönderebilirler.

Stored Procedure'un diğer bir özelleği ise programlama deyimleri içermesidir. Yani İf, next ve benzeri ifaderi stored procedurelerde kullanıp, mantıksal denetimleri gerçekleştirip, geriye sonuçları dönebilirsiniz. Biraz önce açıkladığım gibi stored procedure parametre aldığı için girilen değerlere göre sonuçta dönebilirsiniz.

Stored procedureler database serverda saklanmasından dolayı daha hızlı çalışırlar. Bunun nedeni bir stored procedure ilk çalışma anında derlenir ve sonraki çalışma anlarında bir daha derlenmez.

Yani bir program içerisinden SQL ifademizle servere bağlanıp ifadenin sonucunu programımıza çekerken database bir daha derlenir. Aynı işlemi bir daha yaptığımızda SQL server da database bir daha derlenir. Tabii ki bu zaman kaybına neden olur.

Bazı programcılar SQL ifadesi yazmak yerine devamlı stored procedure yazar, bazılarıda hiç kullanmaz. Ben hiç kullanmayanlardanım. =)


SQL Serverda Stored Procedure Oluşturmak

SQL serverda veritabanı oluşturduğumuz zaman stored procedure oluşturmak için Stored Procedures klasöründen oluşturabiliriz. Klasöre sağ tıklayarak yeni bir stored procedure oluştur demeniz yeterli olcak...

CREATE PROCEDURE CustOrderHist @CustomerID nchar(5)

AS

SELECT ProductName, Total=SUM(Quantity)FROM Products P, [Order Details] OD, Orders O, Customers CWHERE C.CustomerID = @CustomerIDAND C.CustomerID = O.CustomerID AND O.OrderID = OD.OrderID AND OD.ProductID = P.ProductID

GROUP BY ProductName

Örneğimizde Create Procedure diyerek bir procedure oluş komutu vermiş oluyoruz. Daha sonra procedure ismimizi veriyoruz. Kullanacağımız parametrik ifadeyi AS ve Create Procedure ifadelerinin arasına yazıyoruz. Dikkat edersek parametrik ifadenin veri tipini isminden sonra yazıyoruz. AS kelimesinden sonra gerekli olan sql ifademinizi giriyoruz ve işlem tamamlanıyor.

Peki bu kadar mı?

Tabii ki hayır. Procedure derlenmedi. Şuan sadece havaya yazı yazmış gibi bir şey yapmış oluyoruz.

exec CustOrderHist yazarak procedure derlenmiş oluyor.

Şimdi stored procedures klasörümüzü yenilersek CustOrderHist adında nur topu gibi bir sp miz oldu. Üzerinde bir değişiklik yapmamız için çift tıklayıp açın değişikliğinizi yapın ve tekrar exec ile derleyin bu kadar... Kolay gelsin.

neden out neden ref

C# 'ta 2 anahtar kelime olan out ve ref 'ten bahsedeceğim. Bu 2 anahtar kelime değer türlerini ve veri türü referans yollarını fonksiyonlarımıza taşımamıza yarıyor.

Neden Ref?
Değer türü derken int, bool gb. kavramlardan bahsettiğimi anlamışsınızdır. Bu veri türleri kullanılırken bu değişkenlerin yeni bir kopyası oluşturulur ve bu kopyalar üzerinden işlem gerçekleştirilir. Yani fonksiyonlarda kopya değişkenlerimizi kullanıyoruz. Ancak bazı durumlarda kopya kullanmak yerine değer türünü direk kullanmak isteriz. Bunu C# bu anahtar kelimelerle gerçekleştiriyoruz.
Gelelim bu 2 anahtar kelimeyi nasıl kullanıyoruz.

Şimdi recover bir fonksiyon tanımladık bu geri dönüş değeri olmayan fonksiyon. Bu fonksiyonda 2 int türünde değişkenler oluşturduk. Değişkenlerimize değer atadık. Değişenkenlerimizi ref ifadesiyle DoSomething fonksiyonuna gönderdik. Bu işlemi gerçekleştirerek Değişkenimizin Kopyasını değil kendisini direk olarak DoSomething fonksiyonuna gönderdik. Amacımız örnek oldugu için bu değişkenlerimizin değerlerini birbiriyle değiştirdim ve aldıkları değeri geri gönderip, recover fonksiyonunda yazdırdık. Dikkat etmemiz gereken önemli bir nokta ise ref kullanacağımız değişkene atanmış değer olması gerekir. Yoksa aynen "Use of unassigned local variable" hata mesajını alırız. Eğer recover fonksiyonunda (ref x, ref y) yerine (x, y) yazmış olursak Argument '1': cannot convert from 'int' to 'ref int', hatasını alırdık.
Neden Out?
Aslında out'un mantığı ile ref ' in mantığı tamamen aynıdır. Tek fark ve en önemlisi bu out ifadesinde değişkenimize değer atamamıza gerek yoktur.


Bu örnekte değer atanmamış değişkenimize out ifadesiyle değişken atadık. Basit olsun anlaşılır olsun. :)

facebook kullanıcı adı dönemi.



Dünyanın en gelişmiş sosyal ağ sitesi olan facebookkullanıcıları profillerinde numara ile tanımlıyordu. Ama artık kullanıcılarına kullanıcı adı tanımlamasına izin verdi.


bende bir tane aldım : http://www.facebook.com/emraheroglu


Sizde bir tane kullanıcı adına sahip olmak istiyorsanız aşağıdaki linki tıklayın,

bing

Windows'un yeni göz bebeği semantik arama motoru Bing, yolunda emin adımlarla yürüyor. Steve Ballmer o kadar emin konuşmamakla beraberinde durumdan memnun. Peki Google ve Yahoo gibi devler arasından farklılık olmadan sıyrılmak kolay mı? Cevap belli HAYIR... Bing sadece sizin arama yaptığınız kelimelerle arama yapmıyor. Sizin verdiğiniz ipuçlarından yola çıkarak gerçekten ne aradığınızı içerik olarak bulmaya çalışıyor. Web 3.0 ile ileride daha iyi işler başarıcaklar.Ayrıca söylemeyi unutuyordum Türkçe desteği çok iyi seviyede ve xRank özelliğini ben çok sevdim.



Diğer faydalı linkler:

Birde şöyle bir muhabbet var ... http://bingle.pwnij.com/ buda bing ile google da aynı anda aramaya yapıyor...




Microsoft'un vazgeçilmezinden yeni bir sürüm daha


Aşağıdaki linkten Silverlight ile ilgili bütün bilgilere ulaşabilirsiniz.












Windows 7 kısayol tuşları

Win+Up Pencereyi Büyütme
Win+Down Pencereyi Küçültme
Win+Left Pencereyi Sola Almak
Win+Right Pencereyi Sağa Almak
Win+Shift+Left Sol Monitore Geçiş
Win+Shift+Right Sağ Monitore Geçiş
Win+Home Açık olan dışında tüm pencereleri küçült
Win+T İlk Görev Çubuğu Simgesini Aç
Yeniden basarsanız diğerine geçecektir, Win+Shift+T ile de tersini yapabilirsiniz.
Win+Space Masaüstü görüntüsüne bakış
Win+G Gadgetları Üst Kısma Alacaktır
Win+P Gelişmiş gösterim seçenekleri
Win+X Mobilite merkezi (Vista’da da vardı)
Win+#
(# = bir rakam tuşu) Varolan uygulamadan görev çubuğunda belirtilen sayının slotunda yer açar.
Win + +
Win + -
Zoom in veya out.

Windows Explorer

Alt+P Okuma panelini açar/kapatır