ASP.NET Profile Üzerinde Arama


Bu yazımda ASP.NET’le birlikte gelen Profile sistemini kullanmaktan çekinenlere cesaret verecek bir yöntemden bahsedeceğiz. ASP.NET Profile class’ını inceleyenlerin ilk dikkatini çeken şey kullanım kolaylığıdır. Bu sistem sayesinde veritabanı ve karmaşık kodlarla uğraşmadan kolaylıkla Üyelik ve Profil sistemi oluşturabiliyoruz. Oldukça da sağlıklı çalışıyor. Fakat ilk dikkat çeken şeylerden biri de Profile classında profil özelliklerine göre arama bulunmaması. Bu nedenle bir çok kişi her bir profil özelliğini ayrı tablo sütunu olarak kaydeden Profil Sağlayıcı geliştirmekle uğraşıyor. Halbuki ASP.NET Profile sistemi sonuçta verileri kendine özel bir mantıkla yine veritabanı tablosuna kaydediyor. Bu tablo üzerinde biraz uğraşarak SQL yardımıyla arama yapabiliriz. Sizlere bunun nasıl yapıldığını derinlemesine anlatmayacağım, onun yerine direkt profil tablosundaki belirli bir özelliğin değerini getirebilen bir SQL fonksiyonu paylaşıyorum:

-- =============================================
-- Create date: 09/01/2006
-- Description: Gets the property value from
-- the Asp.Net profile.
-- @PropertyName – The property to
-- be found.
-- @PropertyNamesString – The
-- property names information.
-- @PropertyValuesString – The
-- property values information
-- =============================================
CREATE FUNCTION [dbo].[GetProfilePropertyValue] (
@PropertyName as varchar(max)
, @PropertyNamesString as varchar(max)
, @PropertyValuesString as varchar(max))
RETURNS varchar(max)
AS
BEGIN
DECLARE @StartIndex int
DECLARE @EndIndex int
DECLARE @StartPos int
DECLARE @Length int

-- First we find the starting position
Set @StartIndex = PatIndex('%' + @PropertyName + ':%', @PropertyNamesString) + LEN(RTRIM(@PropertyName)) + 3
Set @EndIndex = PatIndex('%:%', Right(@PropertyNamesString, LEN(@PropertyNamesString) - @StartIndex))
Set @StartPos = Cast(Substring(@PropertyNamesString, @StartIndex, @EndIndex) As Int)

-- Now we need to know how long it is
Set @StartIndex = @StartIndex + @EndIndex + 1
Set @EndIndex = PatIndex('%:%', Right(@PropertyNamesString, LEN(@PropertyNamesString) - @StartIndex))
Set @Length = Cast(Substring(@PropertyNamesString, @StartIndex, @EndIndex) As int)

 

-- Now we get the value we want
RETURN SUBSTRING(@PropertyValuesString, @StartPos + 1, @Length)
END

Bu fonksiyonu SQL Server veritabanınıza kaydedin, ve sonra tek yapmanız gereken bu oluşturduğumuz fonksiyonu SQL select cümlesinde kullanmak.

SELECT
dbo.GetProfilePropertyValue('LastName', PropertyNames, PropertyValuesString)
, dbo.GetProfilePropertyValue('FirstName', PropertyNames, PropertyValuesString)
, dbo.GetProfilePropertyValue('Phone', PropertyNames, PropertyValuesString)
FROM aspnet_Profile

Evet bu kadar basit. Şimdi arama nasıl yapabiliriz? Bu SQL cümleciğini kullanarak (tabi kendi profil özelliklerinizi yazmalısınız) bir View oluşturun. Böylece bu oluşturduğunu View’u kullanarak Profil özellikleri (sütunlar) ve değerleri üzerinde aramalar yapabilirsiniz. Hem daha yüksek performans elde edersiniz, hem de arama işlemi muazzam derece kolaylaşır…

Reklamlar

ASP.NET Profile Üzerinde Arama” için bir yanıt

  1. Siteyi çok beğendiğimi içtenlikle belirtmek isterim. Sitenizi takip listeme alıyorum.

    Teşekkür ederim.

    Serhat Çilingir
    skype: cilingir4,746224E+10

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s