Eğer tablonuzda email alanı varsa ve siz her ihtimale karşı son noktada önlem almak istiyorsanız bir kaç adımda bunu halledeblirsiniz. Sql Server 2005 ve CLR kullanarak.
Önce bir C# fonksiyona ihtiyacımız var. RegEx kullanan basit bir fonksiyon.
public class clsEmailValidator
{
public static int ValidatePostaFormat(string email)
{
string regExPattern = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
@"\.[0-9]{1,3}\.[0-9]{1,3}\.)(([a-zA-Z0-9\-]+\" +
@".)+))([a-zA-Z]{2,4}[0-9]{1,3})(\]?)$";
System.Text.RegularExpressions.Regex regEx = new System.Text.RegularExpressions.Regex(regExPattern);
if (email.Length != 0 & !regEx.IsMatch(email))
{
return 0;
}
{
return 1;
}
}
}
Daha sonra Sql Server 2005'te bir assembly oluşturalım;
CREATE ASSEMBLY EmailValidator
FROM 'C:\Documents and Settings\harunp\My Documents\Visual Studio 2005\Projects\EmailValidator\EmailValidator\bin\Debug\EmailValidator.dll'
Sonra bu assembly i kullanan bir email validasyon fonksiyonu yaratalım.
CREATE FUNCTION ValidateEmail
(
@email nvarchar(80)
)
RETURNS int
AS EXTERNAL NAME EmailValidator.clsEmailValidator.ValidatePostaFormat
Sonra bu fonksiyonu kullanacağımız bir tablo yaratalım. Tek yapmamız gereken fark email alanını yaratırken bir koşul eklemek.
CREATE TABLE [dbo].[tblUser](
[ad] [nvarchar](80),
[soyad] [nvarchar](80),
[email] [nvarchar](80) CHECK ([dbo].[ValidateEmail]([email])=(1))
)
INSERT INTO tblUser(ad,soyad,email)
VALUES('harun','pekşen','test@test.com')
(1 row(s) affected)
INSERT INTO tblUser(ad,soyad,email)
VALUES('harun','pekşen','testtest.com')
Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the CHECK constraint "CK__tblUser__email__412EB0B6". The conflict occurred in database "Test", table "dbo.tblUser", column 'email'.
The statement has been terminated.
Değer email formatında olmadığı için tabloya insert edilemedi. Bu yöntemle geçersiz bir email adresinin veritabanına girişini son noktada kontrol etmiş oluruz.
0 yorum:
Yorum Gönder