12 Temmuz 2012 Perşembe

Entity Framework İlişkili tablolarda Insert İşlemi

Bir çok projemde Entity Framework kullandım.Fakat hep o ilişki sorgularda Entity framework e bir türlü aşina olamıyordum.Bu nedenle yeni geliştirdiğim bir projede entity framework zorlamaya karar verdim.Keşfettim ilk önemli bilgiyi sizinle paylaşak istedim.
Senaryom şöyle ;
 iki tablo birbiriyle ilişkili ve ben işlemler tabloma yeni kayıt girmek için şu kodu kullandım.

            CRMEntities entiti = new CRMEntities();
            islemler islemler_ = new islemler();
            islemler_.islem = strislem;
            islemler_.tarih_saat = DateTime.Now;
            if (genelkullanici.adi != null)
            {
                //newListing.Tbl_Category = DBEntities.Categories.Single(c => c.ID == 2);
                islemler_.kullanici = entiti.kullanici.First(c => c.id == genelkullanici.id);
            }

            else
                islemler_.kullanici = null;
            entiti.AddToislemler(islemler_);
            int saveChanges = entiti.SaveChanges();

Normalde işlemler tabloma yeni kayıt girmek için islemler.kullaniciid = genelkullanici.id girmem gerek fakat entityframework ilişkili tablolarda nesne girmemizi istiyor bu sebeble.
islemler_.kullanici = entiti.kullanici.First(c => c.id == genelkullanici.id);
 bu kod derdime derman oldu.

21 Haziran 2012 Perşembe

Entity Framework Insert-Update-Delete-Select(CRUD işlemi)

Merhabalar bu yazımda Entity Frame work kullanarak CRUD işlemleri yapacağım için oldukça heycanlıyım.SQL sorgularına sinir olan birisi için büyük bir zevk olduğunu tahmin edebilirsiniz.
INSERT İŞLEMİ
CRMEntities mgz = new CRMEntities();
//Önce yeni bir  Entity Data model oluşturup aşağıdaki kodları ancak böyle uygulayabilirsiniz.
//tabiki nesnelerin benzer olaası VS2010 kullanılması gibi ayrıntıları geçiyorum
Urunler urn = new Urunler(); // yeni bir instance oluşturuyorum
//nesnemi dolduruyorum
 urn.UrunAdi = txtUrunAdi.Text.Trim();
 urn.Kategori = txtUrunKategorisi.Text.Trim();

urn.Adet = Convert.ToInt32(txtUrunAdet.Trim());
 //nesnemi ekliyorum
mgz.AddToUrunler(urn);
//değişiklikleri uyguluyorum
mgz.SaveChanges();

 UPDATE İŞLEMİ
var magaza = new CRMEntities(); //CRMEntities mgz = new CRMEntities(); demekten bir farkı yok
Urunler urn = (from c in magaza.Urunler where c.ID == 1 select c).First();
//update çekeceğimiz sorgumuzu çekiyoruz "select * from Urunler where ID=1"  gibi bir sorgu sadece LİNQ ile...
 //nesnemi değiştiriyorum
urn.Kategori = txtUrnKategorisi.Text.Trim();
urn.UrunAdi = txtUrunAdi.Text.Trim(); 
urn.Adet = Convert.ToInt32(txtUrunAdet.Text.Trim()); 
 //değişiklikleri uyguluyorum
magaza.SaveChanges(); 

 DELETE İŞLEMİ
 CRMEntities mgz = new CRMEntities();
 Urunler urn = (from c in mgz.Urunler where c.ID == 1 select c).First();
 mgz.DeleteObject(urn);
 mgz.SaveChanges();

SELECT İŞLEMİ
CRMEntities mgz=new CRMEntities();
//bir tablonun tümünü seçmek
var sorgu=from c in mgz.Urunler select c;
//Kategorisi belli bir veriyi sorgulayarak seçmek
var sorgu2=from d in mgz.Urunler where d.Kategori==("Elektronik") select d;
//bir tablonun sadece iki sutunu seçmek
var sorgu3 = from e in mgz.Urunler select new { e.Kategori, e.UrunAd };


13 Haziran 2012 Çarşamba

C# Using Kullanımı

Kod yazarken .Net en önemli güzelliklerinden biride Çöp toplayıcılarının(garbage Collection) olması yani .net işi biten nesneyi sizin dispose edip öldürmenize bakmadan doğrudan öldürerek müthiş bir performans kazandıra biliyor fakat veritabanı nesneleri oluşturulduktan sonra bağlantı hala devam ettiği için (connection Open durumu) bağlantı bir try-catch-finally blogları içinde dispose edilmesi unutulduğundan genelde bellek canlı bir şekilde kalır ve programımızın içine etmeye başlar
try-catch-finally bloğunu kullanmakta son derece sinir bozucu olup bir sürü offflayarak kod yazmanıza neden olur .Örneğin
    SqlConnection cn = null;
     SqlCommand cm = null;
     try
     {
         cn = new SqlConnection(connectionString);
         cm = new SqlCommand(commandString, cn);
         cn.Open();
         cm.ExecuteNonQuery();
     }
    finally
    {
        if (null != cm)
            cm.Dispose();
        if (null != cn)
            cn.Dispose();
    }

 Aynı kodu using kullaarak pek âla yapabilirdik.
        using (SqlConnection cn = new SqlConnection(connectionString))
     {

         using (SqlCommand cm = new SqlCommand(commandString, cn))
         {
             cn.Open();
             cm.ExecuteNonQuery();
         }
     }

Böylece Using kodu bizim otomatik olarak nesnelerimizin yok edilmesini sağlayarak Garbage Collectionı tetikleyebiliyor.

10 Kasım 2011 Perşembe

Ckeditor araçlarını kodla oluşturmak

ckeditör kurulduktan sonra üzerinde görülecek olan düğmeleri kodla değiştirmek kolayca mümkün
örneğin bu kodlar page_load olayının içine yazılabilir
ckeditor.config.toolbar = new object[]
{
                    new object[] { "Source", "-", "Save", "NewPage", "Preview", "-", "Templates" },
                    new object[] { "Cut", "Copy", "Paste", "PasteText", "PasteFromWord", "-", "Print", "SpellChecker", "Scayt" },
                    new object[] { "Undo", "Redo", "-", "Find", "Replace", "-", "SelectAll", "RemoveFormat" },
                    new object[] { "Form", "Checkbox", "Radio", "TextField", "Textarea", "Select", "Button", "ImageButton", "HiddenField" },
                    "/",
                    new object[] { "Bold", "Italic", "Underline", "Strike", "-", "Subscript", "Superscript" },
                    new object[] { "NumberedList", "BulletedList", "-", "Outdent", "Indent", "Blockquote", "CreateDiv" },
                    new object[] { "JustifyLeft", "JustifyCenter", "JustifyRight", "JustifyBlock" },
                    new object[] { "BidiLtr", "BidiRtl" },
                    new object[] { "Link", "Unlink", "Anchor" },
                    new object[] { "Image", "Flash", "Table", "HorizontalRule", "Smiley", "SpecialChar", "PageBreak", "Iframe" },
                    "/",
                    new object[] { "Styles", "Format", "Font", "FontSize" },
                    new object[] { "TextColor", "BGColor" },
                    new object[] { "Maximize", "ShowBlocks", "-", "About" }
};

Bu sayede gelismis bir editore sahip olabilirsiniz.
Biraz daha basit bir şeyler isterseniz.
ckeditor_ozet.config.toolbar = new object[]
{
                    new object[] { "Bold", "Italic", "Underline", "Strike", "-", "Subscript", "Superscript" },
                    new object[] { "Styles", "Format", "Font", "FontSize" },
                    new object[] { "TextColor", "BGColor" },
};

CKEditor için Ckfinger Kurulumu .Net ile nasıl yapılır.

Ckeditör kurulumu yaptığınızı varsayarak Ckfinder kurulumunu yapmayı ve böylece sunucunuza CKeditor kullanarak dosya göndermeyi inceleyebiliriz.
1- http://ckfinder.com/download adresine girerek aspnet sekmesinden download zip diyerek zip dosyasını indirin.
2-zip dosyasından ckfinder klasorunu projenizin ana dizinine kopyalayın.daha sonra
\ckfinder\bin\Release\CKFinder.dll dosyasını kendi asp.net projenizin bin dizini altına kopyalayın
3.Visual studioda References kısmından bin dizini altına kopyaladığınız CKFinder.dll dosyasını referanslarınıza ekleyin.(Add references>browse>../bin/CKFinder.dll)
4.Sonra Asp.net projemize eklediğimiz ckfinder klasörü altındaki config.ascx dosyasını açın.
CheckAuthentication() fonksiyonundaki return false; değerini return true; olarak değiştirelim.
*Bu değişiklikler bazı sorunlara neden olabilir.CheckAuthentication() fonksiyonundaki uyarıya dikkat edin.
 5.SetConfig()  fonksiyonuna gelelim ve aşağıdaki değişkenleri kendi isteğimize göre geliştirelim.
BaseUrl = "/resim/";
BaseDir = "C:/inetpub/vhosts/sitem.com/httpdocs/resim/";
BaseUrl bizim ana dizindeki resimleri koyacağımız dosyanın adı
BaseDir o klasörün fiziksel yolu olduğunu görebilirsiniz.
Resimleri ekleyeceğiniz dosyalara plesk panelden yada kullandığınız panelde yazma izni vermeyi unutmayın!!!
BaseDir yolunu plesk panelde yetki verilen alandan görebiliriniz.Yada hosting firmanızdan rica edebilirsiniz.
6.Ckeditoru kullandığımız asp.net dosyasındaki kod kısmını açıp. Page_Load kısmına aşağıdaki kodları ekleyelim.
 CKFinder.FileBrowser _FileBrowser = new CKFinder.FileBrowser();
_FileBrowser.BasePath = "ckfinder/";
_FileBrowser.SetupCKEditor(ckeditor);
bu kodları eklediğimizde ckeditor olarak tanımladığımız CkEditor nesnemizdeki resim ekleme ikonuna tıkladığımızda Sunucuyu Gez Düğmesini göreceksiniz. Ve Artık Resimleri sunucuya gönderebilirsiniz.

Javascript ile sayfa adını almak

web sitesi adresinizin www.tersduz.com/icerik.aspx olduğunu farz edin bu
elimizdeki javascript kodu bize icerik.aspx sayfa adının dönmesini sağlamakta.
        var sPath = window.location.pathname;

        //var sPage = sPath.substring(sPath.lastIndexOf('\\') + 1);

        var sPage = sPath.substring(sPath.lastIndexOf('/') + 1);

Aşağıdaki kodlarda örneğin bir master page sahibim ve bu master page içerisinde
<ul>

            <li><a id="anasayfa"
href="default.aspx" class="current">Ana
Sayfa</a></li>
            <li><a id="matematikdersleri"
href="dersler.aspx">Matematik Dersleri</a></li>
            <li><a id="siteharitasi"
href="siteharitasi.aspx">Site Haritası</a></li>
            <li><a id="katkidabulunanlar"
href="katkida_bulunanlar.aspx">Katkıda Bulunanlar</a></li>
            <li><a id="okulumuz"
href="http://www.cumhuriyetioo.edu.tr">Okulumuz</a></li>

</ul>  

eğer kullanıcı sayfalar birisine tıkladığında örneğin dersler.aspx sayfasına
tıkladığında current classının anasayfadan gidip matematikderslere geçmesi
gerekli bunun için geliştirmiş olduğum
javascrip kodu şöyle oldu.
<script type="text/javascript">
    $(document).ready(function () {
         var sPath = window.location.pathname;
        //var sPage = sPath.substring(sPath.lastIndexOf('\\')
+ 1);
        var sPage = sPath.substring(sPath.lastIndexOf('/') +
1);
        if (sPage == "") {  
$("#anasayfa").addClass("current");        
$("#matematikdersleri").removeClass("current");
$("#siteharitasi").removeClass("current");
$("#katkidabulunanlar").removeClass("current");           
$("#okulumuz").removeClass("current");
        }
        else if (sPage == "dersler.aspx") {
$("#anasayfa").removeClass("current");
$("#matematikdersleri").addClass("current");
$("#siteharitasi").removeClass("current");           
$("#katkidabulunanlar").removeClass("current");
$("#okulumuz").removeClass("current");
        }
        else if (sPage == "siteharitasi.aspx") {
$("#anasayfa").removeClass("current");
$("#matematikdersleri").removeClass("current");           
$("#siteharitasi").addClass("current");
$("#katkidabulunanlar").removeClass("current");

$("#okulumuz").removeClass("current");
        }
        else if (sPage == "katkida_bulunanlar.aspx") {
$("#anasayfa").removeClass("current");
$("#matematikdersleri").removeClass("current");
$("#siteharitasi").removeClass("current");
$("#katkidabulunanlar").addClass("current");
$("#okulumuz").removeClass("current");
        }
    });
</script>


Eğer menunuz programatik olarak üretiliyorsa örenğin bir repater içerisinde
üretilen ul-li yapısı gibi
<asp:Repeater ID="menu_rpt" runat="server"
DataSourceID="sqlkaynak3">
<HeaderTemplate>
<li><a href="default.aspx" id="menu00"
class="current"><span></span>Anasayfa</a></li>          
</HeaderTemplate>             
<ItemTemplate>           
<li><a href='<%# "konsol.aspx?kategori=" + Eval("id") + "&konsol=" + Eval("adi")
%>' id='<%# "menu" + Eval("id") %>'><span></span><%# Eval("adi") %></a></li>     
</ItemTemplate>

 </asp:Repeater>
ozaman jquery kodlarımız asp.neet için şöyle olmalı
<script type="text/javascript">
    $(document).ready(function () {
        var secili = "menu" + '<%= lblsecilioge.Text %>';
  if (secili != "menuanasayfa") {
            $("#" + secili + "").addClass("current");
$("#menu00").removeClass("current");
        }
        else {
$("#menu00").addClass("current");

        }
    });

</script>

buradaki lblsecilioge.Text içeriği ise görünmeyen bir textbox olup içi söylece
dolduruluyor.
string secili = Request.QueryString["kategori"].ToString();
lblsecilioge.Text = secili;

23 Eylül 2011 Cuma

C# Değişken Kullanımı


Değer Tipleri:
C# Adı
CTS Karşılığı
Açıklama
Max ve Min aralık yada değeri
sbyte
System.Byte
8 bit işaretli tamsayı
-128 : 127
short
System.Int16
16 bit işaretli tamsayı
-32.768 : 32.767
int
System.Int32
32 bit işaretli tamsayı
-2.147.483.648 : 2.147.483.647
long
System.Int64
64 bit işaretli tamsayı
-9.223.372.036.854.775.808 : -9.223.372.036.854.775.807
byte
System.Byte
8 bit işaretsiz tamsayı
0,177083333
ushort
System.UInt16
16 bit işaretsiz tamsayı
0 : 65.535
uint
System.UInt32
32 bit işaretsiz tamsayı
0 : 4.294.967.295
ulong
System.UInt64
64 bit işaretsiz tamsayı
0 : 18.446.744.073.709.551.615
float
System.Single
32 bit tek kayan sayı
+yada - 1,5*10-45 : + ya da - 3,4*1038
double
Sytem.Double
64 bit çift kayan sayı
+yada - 5*10-324 : + ya da - 1,7*10308
decimal
System.Decimal
128 bit ondalıklı sayı
+yada - 1,5*10-28 : + ya da - 7,9*1028
bool
System.Boolean

true ya da false
char
System.Char
Karakterleri temsil eder
16 Unicode karakterleri

Referans Tipleri:
C# Adı
CTS Karşılığı
Açıklama
object
System.Object
Bütün veri türlerinin türediği kök eleman
string
System.String
Unicode karakterlerinden oluşan string