SQL Server Collation change

by Yasin Sirkecili 7. January 2014 00:59

SQL Serverda daha önce oluşturuğunuz bir database'in collation ayarını değiştirmek için aşağıdaki kodu kullanabilirsiniz.

ALTER DATABASE DBName SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE DBName COLLATE TURKISH_CI_AS
ALTER DATABASE DBName SET MULTI_USER

Tags:

Microsoft SQL Server

Profile Groups in Web Applications

by Yasin Sirkecili 6. January 2014 18:00

ASP.NET 3.5 Web Aplikasyonlarında IDE ProfileCommon sınıfından Profile nesnesini türetmediği için ASP.NET Web Site larda olduğu gibi Profile.GroupName.PropertyName şeklinde grup içindeki özelliklere erişmeniz mümkün değildir. Bu durumu ya profile yapısı içinde bir class inherit ederek kendiniz yapılandırıp çözümleyebilirsiniz. Yada 

<group name="iletisim">
<add name="ad" defaultValue="yasin" allowAnonymous="true"/>
<add name="soyad" defaultValue="sirkecili" allowAnonymous="true"/>

<add name="telefon" defaultValue="0532XXXYYZZ" allowAnonymous="true"/>
</
group
>

 

şeklindeki bir grup özelliği için

Label1.Text =
HttpContext.Current.Profile.GetProfileGroup("iletisim").GetPropertyValue("telefon"); 

ifadesini kullanıp erişebilirsiniz.

Not: Profile yapılandırması için daha sonra detaylı bilgi yazacağım.

Tags: , ,

ASP.NET

Colourful DropDownList

by Yasin Sirkecili 6. January 2014 17:58
   

Mail ile gelen bir soruya cevap olarak yazdığım üzere...
DropDownList içerisine System.Drawing.Color structındaki renk adlarını ve değerlerinin nasıl aktarılabileceğini ve ilgili renklerin itemlara nasıl verilebileceğini aşağıdaki kısa kod bloğunu kullanarak yapabilirsiniz. User Profile eylemlerinde kullanıcının kendi background rengini seçebilmesi adına güzel bi uygulama olabilir. kolay gelsin...

protected void Page_Load(object sender, EventArgs e)
{
string[] renkler = System.Enum.GetNames(typeof(System.Drawing.KnownColor));
Array degerler = System.Enum.GetValues(typeof(System.Drawing.KnownColor));


for (int i = 0; i < renkler.Length; i++)
  {
     ListItem item = newListItem(renkler[i].ToString(),degerler.GetValue(i).ToString());
     item.Attributes[
"style"] = "background:" + renkler[i];
     DropDownList1.Items.Add(item); 
  }

}

Tags:

ASP.NET

FileUpload dosya boyutu sınırı ve işlem süresi

by Yasin Sirkecili 6. January 2014 17:56

FileUpload kontrolü ile kullanıcı dosyalarını sunucunuza aktarırken pekde dikkat edilmeyen ancak DOS ataklarına karşın muhakkak önlem almamız gereken bi özellikten bahsetmek istiyorum. Default olarak bir asp.net uygulamasında maximum 4 MB yani 4096kb bir talebi işleme sokabiliriz. FileUpload'a eklenen kullanıcı dosyalarının bu sınırı aşması durumunda sayfa hata verecek ve dosya transfer edilmeyecektir. Ancak bu durum sunucuda 4mb lık talepler yaratacağından ard arda yapılması bir nevi Denial of service atack haline gelecektir. Hem bu durumu engellemek. Hemde ihtiyaç duyduğunuzda daha yüksek dosya boyutuna izin vermek için aşağıdaki düğümü ve niteliklerini web.config sayfanıza eklemeniz gerekiyor.

<httpRuntime maxRequestLength="11264" executionTimeout="120"/>

burda;

maxRequestLength : kb cinsinden dosya boyutu değeri örneğin ben 11 MB olarak belirledim.
executationTimeout : Request talebinin ne kadar süre içerisinde işlem görebileceğini sn cinsinden belirtir. Süre aşıldığında talebin iptali sağlanır. Bu durumda sunucunuzun taleplere cevap verme yetisi azaldıkça işlem süresi içinde gerçekleşmeyen talepleri iptal edeceğinden aynı zamanda aplikasyonunuzun korunmasına yardımcı olacaktır.

Tags: , ,

ASP.NET

Server-side table - tr - td

by Yasin Sirkecili 6. January 2014 17:54

Az önce mail ile gelen sorulardan birine yazdığım cevabı burdada yayınlamak istedim. Bildiğiniz üzere asp.nette server-side table kullanarak dinamik olarak tablolar oluşturup verilerinizi bu tabloların hücrelerine aktarabilir ve görüntüleyebilirsiniz. Genel olarak baktığımızda veritabanı işlemleri hususunda verilerimizi datalist, detailsview, datagrid gibi kontrollere template tanımlayıp istediğimiz düzende görüntülenmesini sağlıyoruz. Ancak hem vt işlemlerinde bu kontroller olmadan kendi tablolama yapımızı oluşturarak verilerimizi görüntüleyebiliriz hemde veritabanı işlemleri haricinde de sunucu taraflı kodlarımızla arayüz görselliğine yön verebiliriz.

Örneğin;

  • Table

    (ne açıklama yazdım ama beah Tongue out)

şeklinde aşağıdaki gibi çıktı yaratacak bi table oluşturabiliriz.

 

 

  • <table Border="2" border="0" style="background-color:Red;border-style:Solid;">
     <caption align="Left">
      bu bir basliktir
     </caption><tr>
      <td>yasin</td><td>sirkecili</td>
     </tr>
    </table>

 

tablomuzun görüntüsü bu şekilde olacaktır. hepsi bu kadar...

Tags:

ASP.NET

Literal & Mode Enumeration

by Yasin Sirkecili 6. January 2014 17:53

Pek fazla kullanmasakda Literal kontrolü gözünüze çarpmıştır. Nedir ? ne işe yarar? hiç baktınız mı ?

Literal kontrolü label kontrolü gibi text propertysine atanan değeri html çıktısına yazdırır. Label'dan 1. farkı label text propertysindeki değeri html çıktısında span tagları arasında yazdırırken literal text propertysine atanan değeri doğrudan doğruya yazdırmayı sağlar. Peki bu durum nerde ve nasıl işe yarar?

mesela html çıktısına html tagları yazarken kullanabiliriz.

Literal kontrolüne ait mode property sine System.Web.UI.WebControls.LiteralMode enumaratörüne ait enum değişkenlerinden yaptığınız seçime göre kontrolün davranış nitelikleri değişecektir. 

örneğin; 

  • Label1.Text = "<YSN>yasin sirkecili</YSN>";
    Literal1.Mode = LiteralMode
    .PassThrough;
    Literal1.Text = "<YSN>yasin sirkecili</YSN>"
    ;
    Literal2.Mode = LiteralMode
    .Encode;
    Literal2.Text = "<YSN>yasin sirkecili</YSN>"
    ;
    Literal3.Mode = LiteralMode
    .Transform;
    Literal3.Text = "<YSN>yasin sirkecili</YSN>";

PassThrough: Text propertysine atanan değerin modifiye olmadan görüntülenmesini sağlar.
Encode: Text propertysine atanan değeri html-encoded haline getirerek tag işaretlerinin encoded karakterlere dönüşmesini sağlar.
Transform: Text propertysine atanan değer içerisinde browser tarafından yorumlanamayan tagların süzülerek gösterilmesini sağlar. Ancak günümüzde kullandığımız tüm tarayıcıların xhtml desteklediğini düşünürsek, Çıktının PassThrough modundan bir farkı olmayacaktır. Çünkü xhtml varolmayan tagların görüntülenmesine sebep olacaktır.

yukarıdaki kod blogunu çalıştırdığımızda alacağımız örnek çıktı aşağıdaki gibi olacaktır.

  •         Label:
            <span id="Label1"><YSN>yasin sirkecili</YSN></span>
            <br />
            
            Literal (PassThrough Mode):
            <YSN>yasin sirkecili</YSN>

            <br />

            Literal (Encode Mode):
            &lt;YSN&gt;yasin sirkecili&lt;/YSN&gt;

            <br />
            
            Literal (Transform mode):
            <YSN>yasin sirkecili</YSN>

Tags: , , ,

ASP.NET

Substitution ile yüksek performans ve Asenkron Caching

by Yasin Sirkecili 6. January 2014 17:51

Asp.net uygulamalarında projelerimizi hızlandırmak için birçoğumuz caching yapısını kullanmışızdır. Ancak sayfaya belli bir süre için caching uyguladığımızda sayfanın tamamı cache bellekte saklanarak belirtilen zaman geçmediği müddetçe yenilenen verileri görmemiz mümkün olmuyordu. Bu sorunu önbelleğe alınan sayfanın dinamik noktalarını caching yapısından ayrı tutmamızı sağlayan substitution kontrolü kendisine gönderdiğimiz html çıktıları ile caching alanından bağımsız olarak dinamik yapısını kullanabilmektedir.

Konuyu bir örnek üzerinde açıklayacak olursak;

substitution.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="substitution.aspx.cs" Inherits="substitution" %>
<%@ OutputCache Duration="15" VaryByParam="none" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Label" ></asp:Label>
<br />
<asp:Substitution ID="Substitution1" runat="server" MethodName="SubFonk" />
</div>
</form>
</body>
</html>

 sayfamızda 15sn boyunca caching uygulaması yapacağımızı belirterek. 15sn boyunca sayfanın içeriğinin güncellenmemesini sağlayabiliriz. Ancak burda Substitution kontrolünün methodname propertysinden faydalanarak sayfa üzerinde dinamik bir alan tanımlayıp bu alanı güncelleyecek bir fonksiyon tanımlayabiliyoruz.

substitution.aspx.cs

public partial class substitution : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToString();
}
public static string SubFonk(HttpContext icerik)
{
return "Anlık Zaman: " + DateTime.Now.ToString();
}
}

Burada Page_Load eventine yerleştirdiğimiz kod ile sayfaya zamanı yazdırıyoruz. Ancak bu zaman ne kadar postback yaparsak yapalım cache duration süresi boyunca güncellenmeyecektir. Bu nedenle sayfa üzerinde 15sn geçmesini beklemeden güncellenecek bir alana ihtiyacımız olabilir. Bu durumda sayfa üzerine eklediğimiz ve SubFonk fonksiyonundan etkilenmesini istediğimiz Substitution1 kontrolümüz ile yine zamanı string formatında return ediyoruz. Böylelikle sayfanın 15sn lik zaman dilimindeki postbacklerinde Label1 in text propertysinin etkilenmeyeceğini ancak Substitution1 kontrolünün içeriğine string formatında gönderdiğimiz html içeriğinin güncellendiğini gözlemleyebiliriz.

Burada dikkat etmemiz gereken 2 husus vardır. 1. si Substitution kontrolü html çıktısını alacağından bu kontrolün methodname propertysine atadığımız fonksiyonun geriye string türünde veri göndermesi gerekmektedir. Bununla beraber 2. hususta yine bu fonksiyonun static olarak tanımlanması gerektiğidir. Bunun nedeni sayfa her postback olduğunda sunucu tarafında yeniden üretilmesidir. Static tanımlı methodlar bellekte static bölgesinde tutulduğundan yeniden üretilmeden çalışacaktır. Böylelikle caching mekanizmasına aykırı davranmamış olacaktır.

Tags: , , ,

ASP.NET

SMTP Authentication ve System.Net.Mail Class

by Yasin Sirkecili 6. January 2014 17:50

SMTP Authentication gerektirmeyen mail serverlarda çoğumuz smtp authentication bilgisi yazmadan maillerimizi gönderiyoruz Tabiki bu yöntemin kullanıldığı sunucular genel olarak spam mail göndermeye uygun diyebiliriz. Standart olarak birçoğumuz smtp serverımızı mail.alanadi.com şeklinde tanımladığımızdan eğer SMTP Authentication gerektirmeden mail gönderilmesine olanak sağlarsak herkesin bizim serverımız üzerinden mail göndermesi mümkün hale gelir. Bu bir güvenlik açığımıdır sorusuna evet diyebilirim çünkü milyonlarca mail gönderen toplu mail gönderme programları mevcut. Peki SMTP Authentication gerektiren sunucularda nasıl mail göndeririz ona değinelim.

ilk olarak işimizi kısayoldan halletmek için web.config dosyamıza system.net nodeunun altındaki mailSettings nodeunda gerekli ayarlarımızı yapalım.

<system.net>
<
mailSettings
>
<
smtp from="info@alanadi.com"
>
<
network port="25" host="mail.alanadi.com" userName="info@alanadi.com" password="sifrem"defaultCredentials="true"
/>
</
smtp
>
</
mailSettings
>
</
system.net>

bu aşamadan sonra kodlarımıza bakalım.

SmtpClient smtpserver = new SmtpClient();
MailAddress mSender = new MailAddress("info@alanadi.com"
);
MailAddress mTo = new MailAddress("to@alanadi.com"
);
MailMessage newMail = new MailMessage
(mSender, mTo);
smtpserver.Send(newMail);

gördüğünüz gibi bu aşamadan sonra info@alanadi.com adresi ile gönderdiğimiz tüm maillerde mailSettings nodeunda belirttiğimiz SMTP Authentication bilgileri geçerli olacaktır.

Peki ya Web.Config kullanmadan nasıl çözerim bu işi derseniz.

SmtpClient smtpserver = new SmtpClient();
MailAddress mSender = new MailAddress("info@alanadi.com");
MailAddress mTo = new MailAddress("to@alanadi.com");
MailMessage newMail = new MailMessage(mSender, mTo);
System.Net.
NetworkCredential auth = new System.Net.NetworkCredential("info@alanadi.com","sifrem");
smtpserver.UseDefaultCredentials = 
false;
smtpserver.Credentials = auth;
smtpserver.Send(newMail);

yönetiminide kullanabilirsiniz.

Tags: ,

ASP.NET | C#

Yüklenme safhasındaki Erişilebilir ve kontrol edilebilir sayfa olayları

by Yasin Sirkecili 6. January 2014 17:48

Sayfanın taryıcıya gönderilmesi anına kadar kontrol edilebilir sayfa olaylarına genel olarak bakacak olursak PreInit, Init, InitComplete, PreLoad, Load, PreRender, PreRenderComplete, Unload olaylarını görürüz... Bu olayları kısaca açıklayayim...

PreInit: Sayfanın kullanıma hazırlanmasındaki ilk olaydır.
Init: Sayfanın kullanıma hazırlandığı safhadır. Ön yükleme diye adlandırabiliriz. Kontroller yüklenmeye başlar. Dinamik olarak kontrol ekleyecekseniz en uygun safhadır ki Belleğe ikinci işlemi yaptırmadan daha yüksek perdormans kullanabilesiniz.
InitComplete: Kontroller yüklenmesi tamamlanmıştır. Artık Load eventinde kontrollere erişebilir ve işlem yapabilirsiniz.
PreLoad: Sayfa belleğe yüklenmeye başlamak için hazırlanır.
Load: Sayfa belleğe yüklenir.
LoadComplete: Sayfanın belleğe yüklenmesi tamamlanır.
PreRender: Konroller bellekten tarayıcı için oluşturulmaya başlar.
PreRenderComplete: Sayfanın tarayıcıya gitmesi için hazır olduğu andır. Aynı zamanda viewstate bilgileride bu anda yüklenmiştir.
Unload: Sayfa bellekten silinir. Tüm kontroller bellekten kaldırılır. 

Şimdi bu olayların yönetilmesine bakalım. 

Page directive'inde default olarak tanımlı gelen AutoEventWireUp="true" attribute'u sayfanızda code-behind olarak eventlara ait protected methodları manuel olarak yazıp kullanmanıza olanak tanır. Sayfa yüklenirken burda belirttiğim 9 olaya ait methodları arar ve varolanların içindeki kodları gerçekleştirir. AutoEventWireUp attribute'u size event yaratmadan manuel olarak sadece olaylara ait methodları ve parametrelerini belirtip kullanmanızı sağlar. 

Örneğin AutoEventWireUp="true" olduğu durumda code-behind sayfanıza

protected void Page_LoadComplete(object sender, EventArgs e) { 
 //
}

methodunu ekleyip kullanabilirsiniz ancak false olduğu durumda öncelikle partital class ait bir constructortanımlayarak classın çağırıldığı anda istediğiniz event'ların yaratılmasını sağlamanız gerekir. Örnekleyecek olursak 

public deneme() { 
Page.LoadComplete += new EventHandler(Page_LoadComplete);
}

deneme class ı için bir constructor tanımlayarak önce eventi belirtelim daha sonra...

protected void Page_LoadComplete(object sender, EventArgs e) { 
 //
}


böylelikle artık sayfanın yüklenme safhasındaki olaylara müdahale edebiliriz. Bunların haricinde birkaç Page Event daha mevcut tabikide örneğin transactionları yönetmek, databinding anını gözlemlemek gibi... onlarıda başka bir yazıya artık...

Tags: , , , , , , , ,

ASP.NET

ASP.NET 2.0'da CodeSubDirectories kullanarak birden fazla dil ile entegre çalışabilmek

by Yasin Sirkecili 6. January 2014 17:47

ASP.NET klasörülerinden biri olan ve dinamik derlemeye tabi olan App_Code klasörünü birçoğumuz projelerimizde yazdığımız classlar için kullanmışızdır. Ancak zaman zaman Ortak çalışma, Hazır algoritmalar gibi gereksinimlerden dolayı kullandığımız dilden başka bir dildeki classları kullanmak zorunda kalmamız gerekir. (Basicci Proje arkadaşlarına saygı duymak :) )  Bu noktada asp.net 2.0 projelerinde birden fazla dil ile çalışabilirsiniz. AncakApp_Code klasörüne eklediğiniz classlar tek bir assembly olarak derleneceğinden debuggerın ayrım yapması gerekmektedir. Bu nedenle asp.net projenize App_Code altına 2 farklı dil için iki ayrı klasör ekleyip isimlerini csharp ve vbasic olarak belirleyin. Daha sonra web.config de compilation tagı altındaki codeSubDirectoriestagını kullanarak farklı dillerdeki kodlarınızın uzantısına göre derlenmesini sağlayabilirsiniz. Böylelikle birden fazla dil ile entegre çalışabilirsiniz.

 

<compilation debug="true">
    <codeSubDirectories>
        <
add directoryName="csharp"/>
        <
add directoryName="vbasic"/>
    </
codeSubDirectories>
vs.. vs..
</compilation>

Tags:

ASP.NET

Calendar

<<  August 2016  >>
MoTuWeThFrSaSu
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

View posts in large calendar

Page List

    RecentComments

    None