May 18th, 2009

Sql Server Kısıtlamaları

Adam ne güzel anlatmış:

http://msdn.microsoft.com/en-us/library/ms143432.aspx

May 15th, 2009

VS.NET Kısa Yolları

Bu kadar çok kısa yol var mıymış? Peh peh peh…

http://www.dofactory.com/ShortCutKeys/ShortCutKeys.aspx#general

May 12th, 2009

T-SQL “Divide By Zero” Hatasını Engellemek

SQL Server’da bir sorgumda Alan1/Alan2 gibi bir değer kullanmak zorundaydım.

Ancak Alan2 “0″ değeri aldığı zaman “divide by zero” hatası alıyordum. İsteğim bu gibi durumda eşitliğin değerinin “0″ olması idi.

Ayrıca Alan2 null değeri alırsa da eşitliğin null yerine “0″ olmasını istiyordum.

Çözümü internette buldum, belki de sizin de ilginizi çeker:

ISNULL(Alan1/NULLIF(Alan2,0),0)

May 11th, 2009

Hex Renk Kodundan .Net Color oluşturmak


string hexRenkKod = “#B9FFA0″;

System.Drawing.Color renk = System.Drawing.ColorTranslator.FromHtml(hexRenkKod);

May 11th, 2009

DayPilot Schedule Component

Open source, kullanımı kolay olan güzel bir schedule component’i.

Pro (paralı :)) versiyonu oldukça gelişmiş ama lite versiyon da oldukça iş görüyor.

dp 

İndirmek için:

http://www.daypilot.org/

May 8th, 2009

Web Servisindeki Metodu URL’den Çağırmak

Bir web servisini referans alıp, metodu oradan çağırmak yerine direk http://www.webservisim.com/service1.asmx/MyMethod?Id=22&Ad=Yalco şeklinde url’den çağırmak için yapılması gereken şey web.config’te system.web düğümünün altına aşağıdaki satırları eklemek olacaktır. Bu yöntem özellikle excel’den veri çekerken çok işe yarıyor.

<webServices>
    <protocols>
      <add name="HttpGet"/>
      <add name="HttpPost"/>
    </protocols> 
</webServices>

May 6th, 2009

Internet’le ilgili işlerde Default WebProxy ile çalışmak

Sadece bir satır kod:

WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultCredentials;

May 6th, 2009

Alacakaranlık Kuşağı : SessionID

Dün bir problemle uğraşırken çok ilginç bir şey keşfettim ve bunu paylaşmak istedim.

Konu SessionID ve global.asax hakkında.

Bunu bir örnek üzerinden anlatmak isterim:

Önce Default.aspx’e bir adet HyperLink kontrolü atalım. Maksat, bu linkten Open In New Browser diyerek test edeceğimiz sayfadan birden fazla açmak. Böylelikle aynı session’a sahip birden fazla sayfaya sahip olabileceğiz.

Şöyle bir kod yeterli olacaktır.

<%Page Language=”C#” AutoEventWireup=”true” CodeFile=”Default.aspx.cs” Inherits=”_Default” %>

<html xmlns=”http://www.w3.org/1999/xhtml”>

<head runat=”server”>

<title>Untitled Page</title>

</head>

<body>
<form id=”form1″ runat=”server”>
<div>
<asp:HyperLink ID=”HyperLink1″ runat=”server” NavigateUrl=”~/Default2.aspx”>Test Sayfam</asp:HyperLink>

</div>

</form></body>
</html>

Daha sonra ikinci sayfamıza (Default2.aspx) gelelim ve sonra form load’a session Id’yi gösteren bir kod yazalım.

<%Page Language=”C#” AutoEventWireup=”true” %>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<script runat=”server”>

protected void Page_Load(object sender, EventArgs e)

{

Response.Write(Session.SessionID);

}

</script>

<html xmlns=”http://www.w3.org/1999/xhtml”>

<head runat=”server”>

<title>Untitled Page</title>

</head>

<body>

<form id=”form1″ runat=”server”>

<div>

</div>

</form>

</body>

</html>

Projemizi çalıştırdığımızda çok ilginç bir şeyle karşılaşıyoruz. Default.aspx’te Link üzerinden Open In New Tab dediğimizde her sayfanın farklı bir session Id’yle açıldığını görüyoruz.


Uğraştığım problemin çözümü için hayati önemli bir durumdu bu. Kafayı yiyerek İki tane çözüm buldum:

Birincisi bir sayfanın herhangi bir yerinde session’a bir değer atarsam problem kendiliğinden çözülüyordu. Şöyle ki (Default.aspx’te)

<%Page Language=”C#” AutoEventWireup=”true” %>

<script runat=”server”> 

protected void Page_Load(object sender, EventArgs e)

{

//Ne yazdığınızın hiç bir önemi yok

Session["Hede"] = “hödö”;

}

</script>

<html xmlns=”http://www.w3.org/1999/xhtml”>

<head runat=”server”>

<title>Untitled Page</title>

</head>

<body>

<form id=”form1″ runat=”server”>

<div>

<asp:HyperLink ID=”HyperLink1″ runat=”server” NavigateUrl=”~/Default2.aspx”>Test Sayfam</asp:HyperLink>

</div>

</form>

</body>

</html>


Burası çalıştıktan sonra tüm sayfalarım aynı session ID’yi verdi. Ancak bu yine bir çözüm değildi. Kullanıcı bu sayfaya uğramadan direk sessionID’nin kullanıldığı sayfaya (yani Default2.aspx’e) erişebilirdi.

Hal böyle olunca ben de Global.asax kullanmaya karar verdim ve oldukça ilginç bir şey keşfettim:

Projeye Global.asax ekleyince hiç bir şey yapmasınız bile Session Id’ler doğru çalışıyor.

Acaba bu sadece Visual Studio’nun web server’ındaki bir sorun mu diye düşündüm ve projeyi IIS’te test ettim ve farkettim ki IIS de aynı şekilde davranıyor.

Buradan çıkardığım sonuç şu:


 

Eğer SessionID kullanacaksanız, projenizde mutlaka Global.asax kullanın, yoksa sürprizlere uğraşmak zorunda kalabilirsiniz.

İlginç !

May 6th, 2009

Bir SQL Cursor Alternatifi : Temp Tablolar

–Dolaşılacak tabloyla ilgili bilgileri atmak için önce bir temp tablo oluşturulur.

CREATE
TABLE #OgrencilerTemp

(

KayitNo int
IDENTITY(1, 1),

OgrenciID int

)

–İlgili bilgiler temp tabloya insert select yardımıyla atılır.

INSERT
INTO #OgrencilerTemp

SELECT OgrenciID

FROM Ogrenciler

–Koyatıları dönmek için kullanılacak değişkenler

declare @KayitSayisi int

declare @KayitNo int

–Başlangıç verileri set edilir.

SET @KayitSayisi =
@@ROWCOUNT

SET @KayitNo = 1

–Kullanılacak bilgiler değişkenlere aktarılır.

–Örnekte sadece 1 tane kullandım.

declare @OgrenciID int

–Tek tek kayıtlar dönmeye başlanır

WHILE @KayitNo <= @KayitSayisi

BEGIN

–İlgili veriler değişlenlere aktarılır

select @OgrenciID=OgrenciID from #OgrencilerTemp where KayitNo=@KayitNo

–Bilgi nerede kullanılacaksa kullanılır.

exec spBirseylerYap @KayitNo

–Sayac’ı 1 arttırır.

Set @KayitNo=@KayitNo+1

END

–Temp tablo silinir.

DROP
TABLE
#OgrencilerTemp

May 6th, 2009

SQL Dependency

İki de bir unutup durduğum bir şey olduğu için buraya yazayım dedim. En azından her seferinde makale okumak zorunda kalmam.

Aktif hale getirmek için:

ALTER DATABASE Database SET ENABLE_BROKER

C# kodları: (Unutulmaması gereken şey sorguda mutlaka sütun adları kullanılmalı ve from kısmı FQN (dbo.Hede) olmalı)

Global değişkenler:

SqlConnection con = new
SqlConnection(“server=.;database=Northwind;trusted_connection=true”);

SqlCommand com;

SqlDependency dep;

SqlDataAdapter da;

DataTable dt;


 


 

private
void Form1_Load(object sender, EventArgs e)

{

   Control.CheckForIllegalCrossThreadCalls = false;

   VeriCek();

}

void VeriCek()

{

   com = new
SqlCommand(“select ogrenciId,ogrenciAd,OgrenciSoyad from dbo.ogrenciler”, con);

   dep = new
SqlDependency(com);

   dep.OnChange += new
OnChangeEventHandler(dep_OnChange);

   SqlDependency.Start(con.ConnectionString);

   da = new
SqlDataAdapter(com);

   dt = new
DataTable();

   da.Fill(dt);

   dgVeriler.DataSource = dt;

}

void dep_OnChange(object sender, SqlNotificationEventArgs e)

{

   VeriCek();

}