Salı, Haziran 16, 2009

TSQL İle Bir Veritabanından Diğerine Tablo Kopyalama

TSQL ile bir veritabanında başka bir veritabanına tablo kopyalamak çok basittir, syntax

SELECT * INTO <hedefveritabanı>.<hedefşema>.<hedeftabloadı> FROM <kaynaveritabanı>.<kaynakşema.>.<kaynaktablo>

Örnek Kod;

SELECT * INTO AdventureWorks.dbo.CustomersTemp FROM Northwind.dbo.Customers

Çarşamba, Nisan 15, 2009

Windows Installer ile kurulum sonrası reboot


Visual Studio ile bir setup oluşturdunuz ve setup'ın kurulum sonrasında bilgisayarı yeniden başlatması gerekiyor, bu durumda de yaparız ?.

Hazırladığım projede böyle bir ihtiyaç ile karşılaştım ve açıkcası microsoft un bu kadar basit birşeyi ne kadar zorlaştırabildiğini görünce delirdim. Tüm setup projesinde "reboot" için bir özellik konmazmı. Neyseki sonunda buldum ve paylaşmak istedim.

Bu işlem için ihtiyacımız olan şey "Microsoft Orca Editor" ilgili programı adresinden indirebilirsiniz.

Orca editör nedir ne işe yarar derseniz. Onu da şöyle açıklayayım. Microsoft installer ile oluşturduğunuz bir setup kendi içerisinde birçok özelliği sahiptir. Bu özellikler "Property Table" isimli bir yapı içerisinde tutulur. Malesef microsoft çalışanları visual studio designer içerisinden bu özellikleri eklemek yerine özellikleri dışardan yönetebilmemiz için bize ayrı bi program yazmışlar. Setup derlendikten sonra property table .msi dosyası içersine gizlenir ve bizde orca editör ile msi dosyasını düzenleyip birçok özelliği değiştirebiliriz.

Orca editörü indirip açtıkdan sonra oluşturduğunuz .msi dosyasını açın. Bu dosyayı ora editör ile açıkdan sonra sol tarafda Tables listesini göreceksiniz. Tables listesinden "Property" seçeneğini seçip sağ tarafta ki liste de sağ tıklayıp açılan menüden "Add Row" seçeneğini işaretleyin. Gelen pencerede özellik adı olarak "REBOOT" özellik değeri olarak da "Force" ekleyin. Hepsi bu kadar; örnek ekran görüntüsünü aşağıda görebilirsiniz


Salı, Şubat 10, 2009

ASP.NET ile hata sayfalarını özelleştirmek.

ISS'in standart hata sayfaları çok profyonel bir site için çok çirkin kalıyor, o yüzden bu hata sayfalarını kendi tasarladığımız hata sayfaları ile değiştirmek hem sitenin profosyonel görüntüsünü korumaya hemde kullanıcılardan gelecek hata bildirimlerini özelleştirmemizde bize çok faydalı olacaktır.

Hataları Sayfa Üzerinde Yakalamak

Bir sayfada hata oluştuğunda öncelikli olarak o sayfadaki "OnError" olayı gerçekleşir bizde bu olayı kontrol ederek hataları yakalayıp kullanıcıyı ona göre yönlendirebiliriz, fakat bu yöntem o sayfaya özel olacağı için pek tercih edilmez.

Uygulama Bazında Hata Yakalama

Her sayfada "OnError" olayını yakalamaktan daha kullanışlı olan yöntem uygulamıza ait "Global.asax" dosyasındaki "OnError" yordamını kullanmaktır. Eğer projenize de Global.asax dosyası yoksa projeniz üzerinde sağ tıklayıp "Add - New Item - Global Application Class" yolunu takip ederek "Global.asax" dosyasını projenize ekleyebilirsiniz. Bu dosyadaki "Application_Error" yordamı içerisine yazacağınız kodlar sayfanız çalışırken bir hata oluştuğunda çalışacaktır.

Hata Kodlarına Göre Sayfa Yönlendirme.
Web programcılarının en çok karşılaştıkları sorunlardan bir tanesinde kullanıcının uygulama içerisinde geçersiz olan bir sayfanın adresini girmesi durumudur. Eğer kullanıcı geçersiz bir adres girerse karşısını 404 hata kodlu sayfa bulunamadı penceresi çıkacaktır. Eğer profosyonel bir web uygulaması yapıyorsak bu hata sayfası yerine kendi özel sayfamızı yerleştirebiliriz. Web.config dosyası içerisindeki "customErrors" alanı bu iş için tasarlanmıştır. Eğer handle etmek istediğiniz hatanın kodunu biliyorsanız resimdeki şekilde yeraldığı gibi oluşan hata kodlarına göre kullanıcıları ilgili sayfalara yönlendirebilirsiniz.



Salı, Ağustos 19, 2008

Aktif veritabanı üzerindeki tüm trigger ları devre dışı bırakın

Aktif veritabanı üzerindeki tüm trigger ları devre dışı bırakmak için aşağıdaki yordamı kullanabilirsiniz.

CREATE PROCEDURE [dbo].[DisableAllTriggers]
AS
DECLARE @string VARCHAR(8000)
DECLARE @tableName NVARCHAR(500)
DECLARE cur CURSOR
FOR SELECT name AS tbname FROM sysobjects WHERE id IN(SELECT parent_obj FROM sysobjects WHERE xtype='tr')
OPEN cur
FETCH next FROM cur INTO @tableName
WHILE @@fetch_status = 0
BEGIN
SET @string ='Alter table '+ @tableName + ' Disable trigger all'
EXEC (@string)
FETCH next FROM cur INTO @tableName
END
CLOSE cur
DEALLOCATE cur
GO
—-Yordamı çalıştırmak için

EXEC [DisableAllTriggers]


Kaynak : http://blog.sqlauthority.com

Perşembe, Ağustos 07, 2008

Sql Server 2008 Çıktı

Bugün itibari ile sql server 2008 microsoft'un sitesinden indirililebilir.

İndirmek için

Pazartesi, Ağustos 04, 2008

SQL Server 2005 : Intersect ve Inner join arasındaki fark

Intersect komutu intersect ile bağlanmış tablolarda eşleşen kayıtları bulmak için kullanılır. Intersect komutu çoğu kez inner join ile aynı sonuçları döndürür.

Intersect komutunu kullanırken veritabanından çektiğiniz sahaların sayıları, sıraları aynı olmalı ve veri tiplerinin de uyumlu olması gerekir.
Şimdi intersect komutunu daha iyi anlamak için birkaç örnek yapalım.


Örnek 1
SELECT *
FROM HumanResources.EmployeeDepartmentHistory
WHERE EmployeeID IN (1,2,3)
INTERSECT
SELECT *
FROM HumanResources.EmployeeDepartmentHistory
WHERE EmployeeID IN (3,2,5)

Sonuç


Yukarıdaki sonuca baktığınızda her iki tablodan da birbiri ile eşleşen EmployeeID değer 2 ve 3 olan kayıtların getirilmiş olduğunu görürsünüz.


Örnek 2
SELECT VendorID,ModifiedDate
FROM Purchasing.VendorContact
INTERSECT
SELECT VendorID,ModifiedDate
FROM Purchasing.VendorAddress

Sonuç


Sorgu sonucu grid üzerinde her iki tabloda eşleşen 104 kayıt gözükmektedir.

Örnek 3
SELECT va.VendorID,va.ModifiedDate
FROM Purchasing.VendorContact vc
INNER JOIN Purchasing.VendorAddress va ON vc.VendorID = va.VendorID
AND vc.ModifiedDate = va.ModifiedDate

Sonuç


Sorgu sonucu grid üzeride her iki tabloda eşleşen tüm kayıtlar gösterilir. Yukarıda örnekten farklı olarak bu örnekte inner join sağdaki ve soldaki tablolardan tüm kayıtları getirir. Dikkat ederseniz bunların bir çoğu biribiri ile eşleşen kayıtlardır.

Örnek 4
SELECT DISTINCT va.VendorID,va.ModifiedDate
FROM Purchasing.VendorContact vc
INNER JOIN Purchasing.VendorAddress va ON vc.VendorID = va.VendorID
AND vc.ModifiedDate = va.ModifiedDate

Sonuç


Bu örnekte ise yukarıdaki örnek farklı olarak "distinct" komutunu kullandık böylece tekrarlayan veriler sorgu sonucunda çıkarıldı ve yine sorgu sonucu olarak 104 tekil kayıt grid üzerine döküldü.


Kaynak : http://blog.sqlauthority.com/2008/08/03/sql-server-2005-difference-between-intersect-and-inner-join-intersect-vs-inner-join/

Cuma, Ağustos 01, 2008

C# İle Şifreleme : Hash Şifreleme Algoritmaları

.Net ile beraber bir çok şifreleme kütüphanesi hazır olarak geliyor. Bu şifreleme sınıfları System.Security.Cryptography kütüphanesi içerisinde yeralmaktadır.

Öncelikli olarak şifreleme yöntemlerini sınıflandırmakta fayda var, şu an dünya üzerinde 3 farklı şifreleme yöntemi bulunmaktadır. Bunlar ;

  1. Hash Şifreleme Yöntemleri
    1. MD5
    2. SHA1
    3. SHA256
    4. SHA384
    5. SHA512
  2. Simetrik Şifreleme Yöntemleri
    1. DES
    2. Triple DES
    3. RC2
    4. Rijndael
  3. Asimetrik Şifreleme Yöntemleri
    1. DSA
    2. RSA
Hash Şifreleme Yöntemleri

Şifrelenen veriye tekrar ulaşmanız mümkün değildir. Şöyleki varsayalım 1000 karakterlik bir veriyi md5, sha 1, sha256 veya sha512 ile şifrelediniz bu durumda elde edeceğiniz şifrelenmiş veri algoritma türüne göre standart boyutta bir karakter katarı olacaktır. Pek tabi şöyle bir soru ortaya çıkacaktır, "eğer şifrelediğim veriye ulaşamayacaksam niye şifreleyim". Bu sorunun cevabı çok basit, bazı yaptığımız uygulamalarda şifrelenmemiş veriyi görmemiz gerekmez, örneğin bir forum açtınız, kullanıcılarınız sisteme üye olarak foruma girebilecek. İşte burada dürüst bir programcı gibi davranarak, kullanıcının girdiği şifre bilgisini Hash algoritma ile şifreleyip veritabanımızda saklamak daha doğru olacaktır. Böylece login işlemi sırasında kullanıcının girdiği veriyi tekrar şifreleyip veritabınındaki şifrelenmiş veri ile karşılaştırabiliriz. Böylece hem kullanıcının şifresini görmeyip kullanıcının özel bilgilerine saygı göstermiş oluruz hemde veri güvenliği sağlamış oluruz.

Şifreleme örneklerimize başlamadan hemen hemen tüm örneklerde karşımıza çıkacak örnek fonksiyonları buraya yazalım.



public static byte[] ByteDonustur(string deger)
{

UnicodeEncoding ByteConverter = new UnicodeEncoding();
return ByteConverter.GetBytes(deger);

}

public static byte[] Byte8(string deger)
{
char[] arrayChar = deger.ToCharArray();
byte[] arrayByte = new byte[arrayChar.Length];
for (int i = 0; i < arrayByte.Length; i++)
{
arrayByte[i] = Convert.ToByte(arrayChar[i]);
}
return arrayByte;
}


MD5 Şifreleme
public string MD5(string strGiris)
{
if (strGiris == "" || strGiris==null)
{
throw new ArgumentNullException("Şifrelenecek veri yok");
}
else
{
MD5CryptoServiceProvider sifre = new MD5CryptoServiceProvider();
byte[] arySifre = ByteDonustur(strGiris);
byte[] aryHash = sifre.ComputeHash(arySifre);
return BitConverter.ToString(aryHash);
}
}


SHA1 Şifreleme
public string SHA1(string strGiris)
{
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek veri yok.");
}else
{
SHA1CryptoServiceProvider sifre = new SHA1CryptoServiceProvider();
byte[] arySifre = ByteDonustur(strGiris);
byte[] aryHash = sifre.ComputeHash(arySifre);
return BitConverter.ToString(aryHash);
}
}

SHA256 Şifreleme
public string SHA256(string strGiris)
{
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek Veri Yok");
}else
{
SHA256Managed sifre = new SHA256Managed();
byte[] arySifre = ByteDonustur(strGiris);
byte[] aryHash = sifre.ComputeHash(arySifre);
return BitConverter.ToString(aryHash);
}
}


SHA384 Şifreleme
public string SHA384(string strGiris)
{
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek veri bulunamadı.");
}else
{
SHA384Managed sifre = new SHA384Managed();
byte[] arySifre = ByteDonustur(strGiris);
byte[] aryHash = sifre.ComputeHash(arySifre);
return BitConverter.ToString(aryHash);
}
}

SHA512 Şifreleme
public string SHA512(string strGiris)
{
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek veri yok.");
}
else
{
SHA512Managed sifre = new SHA512Managed();
byte[] arySifre = ByteDonustur(strGiris);
byte[] aryHash = sifre.ComputeHash(arySifre);
return BitConverter.ToString(aryHash);
}
}

C# İle Şifreleme : Simetrik Şifreleme Algoritmaları


Simetrik şifreleme yöntemlerinde şifrelenen veriye ulaşmak için şifreyi çözen tarafın veriyi şifreleyen tarafla aynı anahtara ihtiyacı vardır. C# Simetrik şifreleme yöntemlerinden 3 tanesini hazır olarak bize sunar. Şimdi bunlar için birer örnek yapalım.


public static byte[] ByteDonustur(string deger)
{
UnicodeEncoding ByteConverter = new UnicodeEncoding();
return ByteConverter.GetBytes(deger);
}

public static byte[] Byte8(string deger)
{
char[] arrayChar = deger.ToCharArray();
byte[] arrayByte = new byte[arrayChar.Length];
for (int i = 0; i < arrayByte.Length; i++)
{
arrayByte[i] = Convert.ToByte(arrayChar[i]);
}
return arrayByte;
}


C# ile DES Şifreleme Yöntemi

public string DESSifrele(string strGiris)
{
string sonuc = "";
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek veri yok");
}
else
{
byte[] aryKey = Byte8("12345678"); // BURAYA 8 bit string DEĞER GİRİN
byte[] aryIV = Byte8("12345678"); // BURAYA 8 bit string DEĞER GİRİN
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, cryptoProvider.CreateEncryptor(aryKey, aryIV), CryptoStreamMode.Write);
StreamWriter writer = new StreamWriter(cs);
writer.Write(strGiris);
writer.Flush();
cs.FlushFinalBlock();
writer.Flush();
sonuc = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
writer.Dispose();
cs.Dispose();
ms.Dispose();
}
return sonuc;
}

public string DESCoz(string strGiris)
{
string strSonuc = "";
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek veri yok.");
}
else
{
byte[] aryKey = Byte8("12345678");
byte[] aryIV = Byte8("12345678");
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
MemoryStream ms = new MemoryStream(Convert.FromBase64String(strGiris));
CryptoStream cs = new CryptoStream(ms, cryptoProvider.CreateDecryptor(aryKey, aryIV), CryptoStreamMode.Read);
StreamReader reader = new StreamReader(cs);
strSonuc = reader.ReadToEnd();
reader.Dispose();
cs.Dispose();
ms.Dispose();
}
return strSonuc;
}

C# ile TripleDES Şifreleme Yöntemi
TripleDES algoritması 24 bit anahtar ve 8 bit iv değeri kullanır.

public string Sifrele(string strGiris)
{
string sonuc = "";
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek veri yok.");
}
else
{
byte[] aryKey = Byte8("123456781234567812345678");
byte[] aryIV = Byte8("12345678");
TripleDESCryptoServiceProvider dec = new TripleDESCryptoServiceProvider();
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, dec.CreateEncryptor(aryKey, aryIV), CryptoStreamMode.Write);
StreamWriter writer = new StreamWriter(cs);
writer.Write(strGiris);
writer.Flush();
cs.FlushFinalBlock();
writer.Flush();
sonuc = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
writer.Dispose();
cs.Dispose();
ms.Dispose();
}
return sonuc;
}

public string Coz(string strGiris)
{
string strSonuc = "";
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek veri yok.");
}
else
{
byte[] aryKey = Byte8("123456781234567812345678");
byte[] aryIV = Byte8("12345678");
TripleDESCryptoServiceProvider cryptoProvider = new TripleDESCryptoServiceProvider();
MemoryStream ms = new MemoryStream(Convert.FromBase64String(strGiris));
CryptoStream cs = new CryptoStream(ms, cryptoProvider.CreateDecryptor(aryKey, aryIV), CryptoStreamMode.Read);
StreamReader reader = new StreamReader(cs);
strSonuc = reader.ReadToEnd();
reader.Dispose();
cs.Dispose();
ms.Dispose();
}
return strSonuc;
}


C# ile RC2 Şifreleme Yöntemi
RC2 algoritması 8 bit anahtar ve 8 bit iv değeri kullanır.

public string Sifrele(string strGiris)
{
string sonuc = "";
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek veri yok.");
}
else
{
byte[] aryKey = Byte8("12345678");
byte[] aryIV = Byte8("12345678");
RC2CryptoServiceProvider dec = new RC2CryptoServiceProvider();
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, dec.CreateEncryptor(aryKey, aryIV), CryptoStreamMode.Write);
StreamWriter writer = new StreamWriter(cs);
writer.Write(strGiris);
writer.Flush();
cs.FlushFinalBlock();
writer.Flush();
sonuc = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
writer.Dispose();
cs.Dispose();
ms.Dispose();
}
return sonuc;
}

public string Coz(string strGiris)
{
string strSonuc = "";
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifresi çözülecek veri yok.");
}
else
{
byte[] aryKey = Byte8("12345678");
byte[] aryIV = Byte8("12345678");
RC2CryptoServiceProvider cp = new RC2CryptoServiceProvider();
MemoryStream ms = new MemoryStream(Convert.FromBase64String(strGiris));
CryptoStream cs = new CryptoStream(ms, cp.CreateDecryptor(aryKey, aryIV), CryptoStreamMode.Read);
StreamReader reader = new StreamReader(cs);
strSonuc = reader.ReadToEnd();
reader.Dispose();
cs.Dispose();
ms.Dispose();
}
return strSonuc;
}

C# ile Rijndael Şifreleme Yöntemi
Rijndael algoritması 8 anahtar ve 16 bit iv değeri kullanır.

public string Sifrele(string strGiris)
{
string sonuc = "";
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek veri yok.");
}
else
{
byte[] aryKey = Byte8("12345678");
byte[] aryIV = Byte8("1234567812345678");
RijndaelManaged dec = new RijndaelManaged();
dec.Mode = CipherMode.CBC;
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, dec.CreateEncryptor(aryKey, aryIV), CryptoStreamMode.Write);
StreamWriter writer = new StreamWriter(cs);
writer.Write(strGiris);
writer.Flush();
cs.FlushFinalBlock();
writer.Flush();
sonuc = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
writer.Dispose();
cs.Dispose();
ms.Dispose();
}
return sonuc;
}
public string Coz(string strGiris)
{
string strSonuc = "";
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrezi çözülecek veri yok.");
}
else
{
byte[] aryKey = Byte8("12345678");
byte[] aryIV = Byte8("1234567812345678");
RijndaelManaged cp = new RijndaelManaged();
MemoryStream ms = new MemoryStream(Convert.FromBase64String(strGiris));
CryptoStream cs = new CryptoStream(ms, cp.CreateDecryptor(aryKey, aryIV), CryptoStreamMode.Read);
StreamReader reader = new StreamReader(cs);
strSonuc = reader.ReadToEnd();
reader.Dispose();
cs.Dispose();
ms.Dispose();
}
return strSonuc;
}


C# İle Şifreleme : Asimetrik Şifreleme Algoritmaları


Asimetrik şifreleme yöntemleri ileri düzey şifreleme yöntemleridir. Bu algoritma türünde veriyi şifreleyen taraf ile veriyi çözecek olan taraf birbirinden farklı a anahtarlar kullanırlar.


public static byte[] ByteDonustur(string deger)
{
UnicodeEncoding ByteConverter = new UnicodeEncoding();
return ByteConverter.GetBytes(deger);
}

public static byte[] Byte8(string deger)
{
char[] arrayChar = deger.ToCharArray();
byte[] arrayByte = new byte[arrayChar.Length];
for (int i = 0; i < arrayByte.Length; i++)
{
arrayByte[i] = Convert.ToByte(arrayChar[i]);
}
return arrayByte;
}


C# ile RSA Şifreleme Yöntemi

public string Sifrele(string strGiris, out RSAParameters prm)
{
string strSonuc = "";
if (strGiris == "")
{
throw new ArgumentNullException("Şifrelenecek veri yok.");
}
else
{
byte[] aryDizi = ByteDonustur(strGiris);
RSACryptoServiceProvider dec = new RSACryptoServiceProvider();
prm = dec.ExportParameters(true);
byte[] aryDonus = dec.Encrypt(aryDizi, false);
strSonuc = Convert.ToBase64String(aryDonus);
}
return strSonuc;
}

public string Coz(string strGiris, RSAParameters prm)
{
string strSonuc = "";
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Çözülecek kayıt yok");
}
else
{
RSACryptoServiceProvider dec = new RSACryptoServiceProvider();
byte[] aryDizi = Convert.FromBase64String(strGiris);
UnicodeEncoding UE = new UnicodeEncoding();
dec.ImportParameters(prm);
byte[] aryDonus = dec.Decrypt(aryDizi, false);
strSonuc = UE.GetString(aryDonus);
}
return strSonuc;