Getdate() with LINQ or Entity / LINQ veya Entity ile Getdate() nasil cekilir?

6. Temmuz 2010

EN:
Sometimes we need to use getdate() function instead of DateTime.Now. Because with getdate() we can get current date with correct format.

To be able to use Getdate() function from LINQ query you should create a view in SQL server.

Just Copy the query in the View and save as "GetDBdate".

SELECT     GETDATE() AS DBDate

Now you should update your Entity or DBML (add the view).
and write a LINQ query like below:

Convert.ToDateTime(db.GetDbDate.First().DBDate) 

TR:
Eğer LINQ/Entity sorgularında getdate() fonksiyonunu kullanmamız gerekiyorsa db de yeni bir view yaratmanız yeterli olacaktır :
Yeni bir view yaratın, Aşağıdakı query'i kopyalayın ve "GetDBDate"
 ismiyle kaydedin

 SELECT     GETDATE() AS DBDate

Şimdi Entity veya DBML inizi güncelleyin, yeni view i  de ekleyin

ve aşağıdaki gibi bir LINQ sorgusu yazın:

Convert.ToDateTime(db.GetDbDate.First().DBDate) 
 
 

1 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

.Net , , , , ,

Meta tag kullanarak IE8 den IE7 uyumlu modda calismasini istemek / work with with meta tags

31. Aralık 2009

Merhaba,

Web yazılımı geliştirirken karşımıza çıkan en büyük problemlerden biri de uygulamamızın diğer tarayıcılarda düzgün görünmemesidir. Şimdiye kadar çıkmış bütün browserlarla uyumlu bir yapı kurduğunuz düşünüyorsunuz ve birden bire öğreniyorsunuz ki Internet Explorer 8 çıkmış ve web sayfanızı bambaşka bir şekilde gösteriyor. Yine saatlerce uğraşıp IE8'de de düzgün çalışsın diye uğraşacaksınız belki de bazı fonksiyonlardan / özelliklerden de vaz geçmek zorunda kalacaksınız. 
Bu durumdan en ucuz şekilde kurtulmanın yolu (geçici bir çözüm yolu olsa da) aşağıdaki gibi bir meta tag yazarak browserın IE7 uyumlu modda çalışmasını sağlamaktır.

Not:Aşağıdaki metaları bütün stil ve css lerin üzerinde bir yere yazmanız gerejiyor. <head> tagından hemen sonra yazmanız yararınıza olacaktır.

IE5 ile uyumlu çalışması için:
<meta http-equiv="X-UA-Compatible" content="IE=5"> 

IE7 Uyumlu kipi çalıştırmak için:

<meta http-equiv="X-UA-Compatible" content="IE=7"> 

IE8 in uyumlu çalıştığından emin olmak için (burada IE7 emule edilmiş oluyor):

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>  

 

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

.Net , , , , , , , , , , , ,

VS2005 AspNet web projelerini debug etmiyor

15. Temmuz 2009

Merhaba,

Geçenlerde eski projelerden birine bakmam gerekti. VS2005 ile yazılmıştı ve ufak bir düzeltme gerekiyordu. Projeyi açabiliyorum ancak internet explorer ile açılış sayfası açılır açılmaz debug stop oluyordu, dolayısıyla breakpoint vs. hak getire:)

Neyse ufak bir araştırma sonucu düzelttim. Tek yapmam gereken şey IIS içinde projenin virtual directorysini bulup asp debugging özelliğini enable etmek oldu. Gerçi normalde böyle bir işlem yapmaya gerek yok ama olur da aynı problemi yaşarsanız aşağıdaki adımları uygulamanız gerekiyor.

  1. IIS üzerinde virtual directory özelliklerine girin
  2. Virtual Directory tabı altındaki Configuration butonuna tıklayın
  3. Debugging Tabına tıklayın
  4. Enable ASP server-side script debugging ve Enable ASP client-side script debugging checkboxlarını checkleyin
  5. Tamam deyip nolur ne olmaz IIS i restart edin.
  6. bu kadar! Umarım işinize yarar...

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

.Net , , , , , ,

VS2008 - Debug / Release menüsünü geri getirme

11. Mayıs 2009

Merhaba,

Geçenlerde bilgisayarımda genel bir temizlik yaptım, hatta temizlik demek biraz hafif kalır komple format attım. Ne de olsa hformat hastalığı var bende:)
Neyse sıra geldi VS2008'i ilk kez çalıştrımaya; normalde ilk kez açıldığında hangi ayarları kullanmak istersiniz diye bir pencere çıkar karşıma ve ben C# gördüğüm yeri işaretlerdim. Bu sefer değişiklik olsun diye web development setting i seçtim, seçmez olaydım. Projeyi Release modda build etmek için ordan gir buradan çık uğraş dur. Halbuki sevimli bir pencerem vardı bunu yapmak için. 

. İşte bunu bir türlü geri getiremiyordum.

Sonunda Tools içinde "Import and Export Settings..." diye bir seçeneği farkettim. Tıklar tıklamaz Reset All Settings yazısını gördüm ve denedim. O malum ilk ekran tekrar karşıma geldi ve bu sefer C# görünüm ayarlarını seçtim. Ne kadar da alışmışım bu haline :) 

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

.Net , , , , , ,

LINQ Sorgusu içinde IF kullanmak ya da IF kullanmaya gerek yok mu?

7. Mayıs 2009

Merhaba,

LINQ ile çalışırken zaman zaman karmaşık sorgular oluşturmamız gerekebiliyor ve doğrudan halledemeyeceğimiz durumlar oluşabiliyor.
Bugün bu durumlardan biri başıma geldi basit bir örnekle anlatmaya çalışacağım.

Source adında bir tablomuz olduğunu varsayalım. Bu tablo içinde OID,Name,startdate,enddate ve SourceType adında 2 alanımız olsun.
Bir Dropdown koyalım ve içine bütün source Typelarını koyalım. ( 3 tanse SourceType olduğunu varsayalım). bir de name'i yazabileceğimiz textboxumuz olsun(txtSearchString).
Bir gridview içinde Tipi dropdownda seçilmiş Tipe uyan bütün sourceları göstermeye çalışalım.
Bunu yapmak için aşağıdakine benzer bir sorgu hazırlamamız gerekir.

var sourceData = from s in dc.Sources
where s.SourceTypeID == int.Parse(ddlSourceType.SelectedValue)
&& s.Name.Contains(txtSearchString.Text)
orderby s.Name
select new
{
OID = s.OID,
SourceName = s.Name,
StartDate = s.StartDateSubscription,
EndDate = s.EndDateSubscription
};

Peki Dropdown'a 1 kayıt daha ekleyelim ismi "Hepsi" olsun ve değerini "0" yapalım.
Şimdi dropdownda "Hepsi" seçildiğinde Hiç sourceType alanına bakmadan sadece source ismi txtSearchString'e yazılan değerle uyuşan kayıtları getirmeye çalışalım.

Ne yapmamız lazım? evet evet buldum!! Hemen sorgunun başına bir IF koyalım ve sourceData sorgusundan bir tane daha yaratalım ama bu sefer içine sourceType alanına baktırmayalım else durumuna da yazarız yine SourceType alanına bakandan:

var sourceData="";

IF (ddlSourceType.SelectedValue == "0")
{

sourceData = from s in dc.Sources
where s.Name.Contains(txtSearchString.Text)
orderby s.Name
select new
{
OID = s.OID,
SourceName = s.Name,
StartDate = s.StartDateSubscription,
EndDate = s.EndDateSubscription
};
}
else
{
sourceData = from s in dc.Sources
where s.SourceTypeID == int.Parse(ddlSourceType.SelectedValue)
&& s.Name.Contains(txtSearchString.Text)
orderby s.Name
select new
{
OID = s.OID,
SourceName = s.Name,
StartDate = s.StartDateSubscription,
EndDate = s.EndDateSubscription
};

}

Evet evet istediğimiz yaptık. Ne olacak kopyalarız yapıştırırız her seferinde, taş attık da kolumuz mu yoruldu dimi?
HAYIR yorulmadı ama bu kadar uğraşmadan da bunu yapabilirdik.

Amacımız ne? Eğer dropdown'un değeri "0" ise SourceTypeID'ye bakmadan ne varsa getirmek.
şöyle bir sorguyla bunu halledebiliriz:

var
sourceData = from s in dc.Sources
where
(s.SourceTypeID == int.Parse(ddlSourceType.SelectedValue) || ddlSourceType.SelectedValue=="0")
&& s.Name.Contains(txtSearchString.Text)
orderby s.Name
select new
{
OID = s.OID,
SourceName = s.Name,
StartDate = s.StartDateSubscription,
EndDate = s.EndDateSubscription
};

where içinde sourceType ı kontrol ettiğimiz sözcüğün başına sonuna parantez ekleyip parantezin içine ||(or) yazıp yanına da condition'u yazıyoruz.

Yine dolandırıp dolandıp anlattım galiba. Umarım işinizi görür ve umarım yazıyı toparlamak için vakit bulabilirim...

1 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

.Net , , , , , , ,

LINQ ile stored procedure den gelen değeri (SCOPE_IDENTITY) almak

5. Mayıs 2009
  • Merhaba,
    Öncelikle yazıyı özensiz şekilde hazırladığım için kusura bakmayın. Boş vakit bulduğumda (tabi bulabilirsem) düzenlemeye çalışacağım.,

LINQ ile çalışırken bir tabloya insert eden prosedürden gelen SCOPE_IDENTITY() verisini almak umduğumdan biraz daha karmaşıkmış. Aşağıda basit bir şekilde anlatmaya çalışacağım.

1-)Prosedürümüzü ID gönderecek şekilde düzenleyelim

Sadece OID ve Name alanı bulunan source adında bir tablomuz olsun. Bunun insert'i için yazacağımız prosedür aşağıdaki gibi olmalı

ALTER procedure [dbo].[TR_InsertSource]
@OID int OUTPUT,
@Name nvarchar(255)
AS
insert into source
( [Name] )
VALUES
( @Name )

set @ID= cast(SCOPE_IDENTITY() AS INT)

2-)Prosedürümüzü ve ilgili tabloyu DBML'e ekleyelim

bu kısım için detaylı açıklamayı vakit bulursam ekleyeceğim :(

3-)insert işlemi yapılacak tablo için Dbml deki değişikliklerimizi yapalım

  • Aşağıda gördüğünüz gibi DBML dosyası üzerinde insert yapılacak tabloyu tıklıyoruz 
  • Properties menüsünden insert alnına tıklıyoruz (use Runtime üzerine)

  • aşağıdaki gibi bir pencere açılacaktır

  • Burada Customize radiobutton unu seçiyoruz
  • çıkan dropdowndan stored procedure mizi seçiyoruz (benim kullandığım TR_InsertSource)
  • oiD olarak tanımladığımız alanın karşısında identity alan adımızın olduğundan emin olalım (OID)
  • sonra da OK butonuna basalım
  • Properties penceresi aşağıdaki gibi olacaktır:
  • 3-)Kodumuzu güncelleyelim

    • öncelikle yeni OID değerini tutacak bir değişken yaratalım:
    int? sourceID = 0;
    
    • şimdi prosedürü çalıştıracak kodu yazalım:

    MDDBDataContext dc = new MDDBDataContext();

    dc.TR_InsertSource(ref sourceID, txtName.Text)

    prosedürün içine yazdığımız ref sourceID sayesinde yukarda integer olarak tanımladığımız sourceID alanına yeni OID değeri kaydedilecektir.
    
    • şimdi de prosedürü çalıştıralım

    dc.SubmitChanges();

    kodun son hali aşağıdaki gibi olacaktır :

    int? sourceID = 0;
    MDDBDataContext dc = new MDDBDataContext();
    dc.TR_InsertSource(ref sourceID, txtName.Text)
    dc.SubmitChanges();

    artık sourceID'yi istediğiniz gibi kullanabilirsiniz.
    
    Umarım işinize yarar...
    

    1 kişi tarafından 5.0 olarak değerlendirildi

    • Currently 5/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5

    .Net , , , , , , ,

    Crystal Reports'u sunucuya tanıtmak

    24. Şubat 2009

    Merhabalar,

    Uzun uğraşlar sonucunda müşterinin istediği tasarıma uygun raporları yaptınız, testleriniz bitti herşey tamam. Artık müşterinin deneyebilmesi için test server'a veya yeni bir projeyse production server'a atma vakti geldi. O da ne! çalışmıyor mu? "Could not load file or assembly 'CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' or one of its dependencies. The system cannot find the file specified." gibi bir hata alıyorsanız yapmanız gereken şey çok basit!

    Eğer VS.NET2008 kullanıyorsanız muhtemelen şu klasörde:"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\CrystalReports10_5" "CRRedist2008_x86.msi" adında bir dosya bulunmalıdır.(endişelenmeyin belirttiğim path içinde yoksa yazıya ekledim). uygulamayı kuracağınız makinede bu dosyayı çalıştırıp crystal report'u register etmeniz yeterli olacaktır.

    Not: Şimdilik sadece vs.net2008 ile gelen versiyon için karşılaştığım problemin çözümünü yazabildim. Fırsat bulabilirsem en kısa zamanda güncelleyeceğim. Umarım sizin de işinize yarar!

    CRRedist2008_x86.rar (15,19 mb)

    1 kişi tarafından 5.0 olarak değerlendirildi

    • Currently 5/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5

    .Net , , , , , ,

    Url Rewriting

    18. Aralık 2008
            Sanırım web de dolaşırken siz de çok kez ismini duymuş ya da farklı farklı sitelerde uygulamalarını görmüşsünüzdür. Eğer neden sitenizde urlrewriting olması gerektiğini ve sitenize nasıl uygulayabileceğinizi merak ediyorsanız tam yerine geldiniz.

     

    Sağladıkları:

    1. Sitenizin arama motorları tarafından daha detaylı indexlenir
    2. Lamerlerin querystringlerinizle oynayıp bir şeyleri karıştırmasını engeller
    3. Kullanıcıya daha hoş görünen bir adrese sahip olursunuz


           Normalde sitemizde bir makale yayınladığımız zaman adresi:

                     www.recepguzel.com/?articleID=1234 gibi olur.

           Url Rewriting sonrasında ise:

                     www.recepguzel.com/1234/Url-Rewriting-Nedir gibi bir adrese sahip olabiliriz.

            Özelliklerinden kısaca bahsetmeye çalıştıktan sonra şimdi de nasıl yapabileceğimize bakalım.

             Aslında işlem temelde 3 aşamadan oluşuyor:

       1-)IIS tarafındaki değişiklikler(Windows XP Pro için)

            IIS tarafında yapacağımız ufacık bir işlem yeterli olacaktır

    • IIS’i açıyoruz ve url rewriting özelliği eklemek istediğimiz website/vdirectory üzerine sağ tıklayıp properties(özellikler)’e tıklıyoruz
    • Virtual Directory/Web site tabı içerisinde Configuration düğmesine tıklıyoruz
    • Karşımıza aşağıdaki gibi bir ekran gelecek, burada Add butonuna tıklıyoruz
    • Açılan ekrandaki browse butonuna basıp “aspnet_isapi.dll” dosyasını buluyoruz.

      Genellikle bu adreste bulunur: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
    • Extension alanına “.*” yazıyoruz.
    • Limit to alanına “GET,HEAD,POST” yazıyoruz.
    • Son olarak da Check that file exist checkboxunun seçimini kaldırıyoruz.
    • Çıkan diğer ekranlara OK OK diyerek işin iis fazını bitirmiş oluyoruz.

    Not: Windows server 2003 üzerinde Virtual Directory üzerinde Configuration üzerine tıkladığımızda farklı bir ekran gelir.

    Çıkan ekranda Application extentions yerine Wildcard application maps altındaki insert butonuna tıklamanız gerekmektedir.

    Burada yine xp'de olduğu gibi aspnet_isapi.dll'i browse edip, Verify that file exist kutucuğunun checkini kaldırıyoruz ve OK ile işlemi kaydediyoruz.

         2-)Web.config de yapılması gereken değişiklikler :

            Aşağıdaki satırları web.config içersinde gerekli yerlere yapıştırıyoruz

                 a.) <configSections> tagları arasına aşağıdaki kodu yapıştıryoruz:

    <section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/> 

                 b.) <httpModules>  tagları arasına aşağıdaki kodu yapıştırıyoruz:

    <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>

                 c.) <system.webServer> tagları arasına aşağıdaki kodu yapıştırıyoruz:

    <modules runAllManagedModulesForAllRequests="true">
    <
    add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule" /> </modules>
    <!--[if !supportLineBreakNewLine]-->
    <!--[endif]-->
                 Eğer yoksa Aşağıdaki kodu da aynı blok içine yazıyoruz:          

    <!--[if !supportLists]-->
    <validation validateIntegratedModeConfiguration="false" />

     

                 d.)Son olarak <configuration> tagı içine aşağıdaki kodu yapıştırıyoruz:

    <rewriter>
    <
    rewrite url="/([0-9]{6})(.*)/(.*)-(.*)" to="~/ArticleDetail/default.aspx?aid=$1"/>
    </
    rewriter>
    <!--[if !supportLineBreakNewLine]--><!--[endif]-->

                 Not:Burada benim makale gösterdiğim sayfam ArticleDetail klasörü içinde default.aspx olduğu için bu şekilde edit ettim, siz kendi sitenize göre değiştirebilirsiniz). Ayrıca rewriter url içine yazdığım ([0-9]{6}) regex komutunu yalnızca 6 karakterli rakamlarla sınırlamak için kullandım. siz kodunuzda  bu kısmı kaldırabilirsiz. Şu an ki hali "/123456/merhaba-dunya" şeklindeki formata göre yazılmıştır.

      3-) Classımızda yapılacak değişiklikler

                 Class da bir değişiklik yapmadan önce referanslarımız arasına “Intelligencia.UrlRewriter.dll” dosyasını eklememiz gerekiyor. Sonra aşağıdaki fonksiyonu makaleye link verdiğimiz yani; makaleleri listelediğimiz sayfanın class ı içine kopyalıyoruz(bunu ayrı bir helper class ına da atabilirsiniz)

    C# kodu: 

    public static string GenerateURL(object Title, object strId)

            {

                //Article’ın konusu

                string strTitle = Title.ToString();

                 #region Generate SEO Friendly URL based on Title

                //boşlukları trimleyelim.

                strTitle = strTitle.Trim();

                strTitle = strTitle.Trim('-');

                strTitle = strTitle.ToLower();

                char[] chars = @"$%#@!*?;:~`+=()[]{}|\'<>,/^&"".".ToCharArray();

                strTitle = strTitle.Replace("c#", "C-Sharp");

                strTitle = strTitle.Replace("vb.net", "VB-Net");

                strTitle = strTitle.Replace("asp.net", "Asp-Net");

                 //noktaları da “-“ karakteri ile değiştirelim

                strTitle = strTitle.Replace(".", "-");

                 //Lüzumsuz karakterleri de bi güzel çevirelim

                for (int i = 0; i < chars.Length; i++)

                {

                    string strChar = chars.GetValue(i).ToString();

                    if (strTitle.Contains(strChar))

                    {

                        strTitle = strTitle.Replace(strChar, string.Empty);

                    }

                }

                 //Sıra geldi aradaki boşluklara, onları da “-“ yapalım

                strTitle = strTitle.Replace(" ", "-");

                 //Yanyana gelen “-“lerden de kurtuluyoruz

                strTitle = strTitle.Replace("--", "-");

                strTitle = strTitle.Replace("---", "-");

                strTitle = strTitle.Replace("----", "-");

                strTitle = strTitle.Replace("-----", "-");

                strTitle = strTitle.Replace("----", "-");

                strTitle = strTitle.Replace("---", "-");

                strTitle = strTitle.Replace("--", "-");

                 strTitle = strTitle.Trim();

                 //Halâ “-“ var mı acaba?

                strTitle = strTitle.Trim('-');

                #endregion

                 //Şimdi de linki istediğimiz şekle çeviriyoruz

                strTitle = "~/Article/" + strTitle + "-" + strId + ".aspx";

                 return strTitle;

    }

    VB.NET Kodu:

    Public Shared Function GenerateURL(ByVal Title As Object, ByVal strId As Object) As String
       
       
        'Article’ın konusu
       
        Dim strTitle As String = Title.ToString()
       
        '#Region "Generate SEO Friendly URL based on Title"
       
        'boşlukları trimleyelim.
       
        strTitle = strTitle.Trim()
       
       
        strTitle = strTitle.Trim("-"c)
       
       
        strTitle = strTitle.ToLower()
       
        Dim chars As Char() = "$%#@!*?;:~`+=()[]{}|\'<>,/^&"".".ToCharArray()
       
        strTitle = strTitle.Replace("c#", "C-Sharp")
       
        strTitle = strTitle.Replace("vb.net", "VB-Net")
       
        strTitle = strTitle.Replace("asp.net", "Asp-Net")
       
        'noktaları da “-“ karakteri ile değiştirelim
       
        strTitle = strTitle.Replace(".", "-")
       
        'Lüzumsuz karakterleri de bi güzel çevirelim
       
        For i As Integer = 0 To chars.Length - 1
           
           
            Dim strChar As String = chars.GetValue(i).ToString()
           
            If strTitle.Contains(strChar) Then
               
               
                   
                strTitle = strTitle.Replace(strChar, String.Empty)
               
            End If
        Next
       
        'Sıra geldi aradaki boşluklara, onları da “-“ yapalım
       
        strTitle = strTitle.Replace(" ", "-")
       
        'Yanyana gelen “-“lerden de kurtuluyoruz
       
        strTitle = strTitle.Replace("--", "-")
       
        strTitle = strTitle.Replace("---", "-")
       
        strTitle = strTitle.Replace("----", "-")
       
        strTitle = strTitle.Replace("-----", "-")
       
        strTitle = strTitle.Replace("----", "-")
       
        strTitle = strTitle.Replace("---", "-")
       
        strTitle = strTitle.Replace("--", "-")
       
        strTitle = strTitle.Trim()
       
        'Halâ “-“ var mı acaba?
       
        strTitle = strTitle.Trim("-"c)
       
        '#End Region
       
        'Şimdi de linki istediğimiz şekle çeviriyoruz
       
        strTitle = ("~/Article/" & strTitle & "-") + strId & ".aspx"
       
        Return strTitle
    End Function

                    Kod bloğumuzu da kopyaladıktan sonra artık link vermeye hazırız.

     

                   Normalde bu şekilde vermemiz gereken linki:

                string url =”articledetail.aspx?ArticleId=1234”;

         bu şekilde veriyoruz :

                string url =GenerateURL(Title,ArticleId).ToString());

    Not: Orijinal urlrewriter dosyasını kullandığımda aşağıdaki problemi yaşadığım için dll'i googlebot hatasına karşı editledim. isterseniz editlenmiş halini sayfanın sonundaki linkten indirebilirsiniz.

    Exception type: HttpException
    Exception message: Cannot use a leading .. to exit above the top directory.

      Intelligencia.UrlRewriter.rar (18,15 kb)

    10 kişi tarafından 4.5 olarak değerlendirildi

    • Currently 4,499999/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5

    .Net , , , , , , , , ,