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.
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
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.
" 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.
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.
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.
Bing: http://www.bing.com/
Diğer faydalı linkler:
Birde şöyle bir muhabbet var ... http://bingle.pwnij.com/ buda bing ile google da aynı anda aramaya yapıyor...
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
Kaydol:
Kayıtlar (Atom)