Şubat 1105

Timer Kullanımı

Yazının başında tanıtımı yapılacak olan Timer nesnesinin System.Timers.Timer olduğunu bildirmek isterim. Web veya Masaüstü uygulamalarında kullanılan, AJAX kütüphanesiyle birlikte gelen Timer değildir. Aynı olmasa da, aslında aynı işlevi görmektedir. Bir sayıcı başlatırsınız, belirli zaman aralıklarında belli işlemleri yapmasını istersiniz.   Örnek Kod: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Timers; /// <summary> /// Summary description for Zamanlayici /// </summary> public class Zamanlayici { public Zamanlayici() { // Constructor } private Timer denemeProjectZamanlayici; public void ZamanlayıcıCalistir() { denemeProjectZamanlayici = new Timer(60000); //1 dk denemeProjectZamanlayici.Elapsed += ZamanlayıcıCalistir_OnTimedEvent; denemeProjectZamanlayici.Start(); } private void ZamanlayıcıCalistir_OnTimedEvent(object source, ElapsedEventArgs e) { MailGonder(); } private void MailGonder() { // Mail gönderme işlemleri } } Yukarıdaki şekilde bir sınıfı projenize kolaylıkla ekleyebilrsiniz. Timer nesnesi yaratılırken gönderdiğimiz parametre işlemin ne kadar sürede yapılmasını istediğimizi belirten değer. milisaniye değerinden gönderilir.   Zamanlayıcı başlatacak olan nesneyi ise  programımızın uygun yerinde yaratıp gerekli çağrıyı yapmamız gerekmektedir. Örnek: Zamanlayici zaman = new Zamanlayici(); zaman.ZamanlayıcıCalistir(); Bu kod parçasını bir component event ile isteğe başlatabileceğiniz gibi ASP.NET projelerinin Global.asax dosyası içinde Application_Start metodu içine de yazılarak gerekli işlemlerin sunucuda kendiliğinden yapılması da sağlanabilir.   Genel kullanımı hakkında bilgi verdikten sonra şimdi biraz detaya inebiliriz. 2 tane constructorı vardır: Timer() Timer(double) : Interval süresini contructor içinde veririz.   Bazı özellikleri i: AutoReset :Interval zamana ulaştıktan sıonra resetlensin mi, yoksa kaldığı yerden saymaya devam mı etsin. CanRaiseEvents : DesignMode : True ise desing mode. Enabled : Etkinleştirme Interval : Milissaniye cinsinden süre Site : Timer nesnesini çalıştıran siteyi ISite olarak tutar.   Bazı metodları: Close : Timer nesnesi tarafından kullanılan bellek alanını bırakır. Finalize : Garbage Collector tarafından yapılan işlemi elle yapmak için kullanılır. Start: Enabled’ı true yapar. Stop : Enabled’ı false yapar.   Kaynak: http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx Tags: , | Categories: .NET | C#
.NET Framework 3.5 ile LINQ teknolojisi ve sonrasında Entity Framework gelmiş ve bunun üzerinden uzun süre geçmiş olsa da, günümüz şirketlerinin çoğu IT konularında ADO.NET teknolojisini kullanmaya devam emekteler. Çünkü, IT konusunda uzun süre kullanılan ve kararlılığı test edilmiş teknolojileri kullanmak, devamlılık ve performans konusunda en iyi çözümdür. Bunun üstünde sunucuların özelliklerine bağlı olarak maliyetleri de gelince ADO.NET en ekonomik çözüm olarak gözükmektedir. Sözü daha fazla uzatmadan kod kısmına geçmek istiyorum: SqlConnection conn = new SqlConnection("Data Source=(local); Initial Catalog=Northwind;Integrated Security=SSPI"); SqlDataReader rdr = null; try { SqlCommand cmd = new SqlCommand("select * from Customers", conn); conn.Open(); rdr = cmd.ExecuteReader(); while (rdr.Read()) Console.WriteLine(rdr[0]); } finally { if (rdr != null) rdr.Close(); if (conn != null) conn.Close(); }   Ancak verinin tek yerde olması, güveli olması vb durumlardan ötürü Connection string web.config dosyası içinde de saklanabilir. <connectionStrings> <add name=”connString” connectionString=”Data Source=(local); Initial Catalog=Northwind; Integrated Security=SSPI” providerName=”System.Data.SqlClient” /> </connectionStrings> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Bu durumda connection string verisini şu şekilde çekebiliriz: ConnectionStringSettings cs = ConfigurationManager.ConnectionStrings[“connString”]; SqlConnection conn = new SqlConnection(cs.ConnectionString); //............................................ .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } İlla sorgu kod tarafından gönderilme zorunluluğu yoktur. Store Prosedure ler ile de işlemler yapılabilir. O nu da şu şekilde ayarlıyoruz: SqlCommand cmd = new SqlCommand("dbo.sp_deneme", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("@Id", Id)); .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }     Yukarıdaki işlemileri tamamladıktan sonra gelen veriyi GridView, DropDownList gibi componentlere yükleyerekamacımıza ulaşmış oluruz. .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } tweetmeme_source = 'makcura'; tweetmeme_service = 'bit.ly'; Tags: , , , , | Categories: SQL | .NET
DateTime sınıfı, .NET altyapısında tarih ve saat ile ilgili düzenlemeler yapmak için kullanılır. DateTime yapısının statik olan birçok metot ve özelliği sayesinde tarih uygulamaları ile ilgili temel pratik işlemler gerçekleştirilebilir. Örneğin bir yılda kaç gün olduğu, artık yılın olup olmadığı, belirlenen herhangi bir ayda kaç gün olduğu gibi bilgiler elde edilebileceği gibi yıl, ay, gün, saat hatta milisaniye gibi zaman bileşenlerini istenilen sırada ekrana yazdırmak da mümkündür. DateTime yapısının kullanılışı genel olarak şu şekildedir: DateTime Tarih(yıl, ay, gün, saat, dakika, saniye, milisaniye); .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } DateTime Sınıfının Özellikleri Now: Yerel bilgisayarın o anki tarih ve saatini döndürür. Today: Yerel bilgisayarın o anki tarihini döndürür. DayOfWeek: O günü (Pazar'dan Cumartesi'ne) karakter katarı (string) olarak döndürür. Month: DateTime nesnesinin ay kısmını integer tipi olarak (int) döndürür. DayOfYear: Bulunulan yılın gününü getirir. UtcNow: O anki zamanın UTC (evrensel zaman) değerini döndürür. Date: O anki tarihi DateTime tipinden döndürür.  DateTime Sınıfının Bazı Önemli Metotları AddDays, AddHours, AddMinutes, AddMilliseconds, AddMonths, AddYears:Belirtilen metotlarla istenilen sayıda gün, saat, dakika, milisaniye, ay veya yıl eklenmesi sağlanır. ToBinary: Belirlenen DateTime nesnesini 64-bit binary (ikili) bir değere dönüştürür. GetDateTimeFormats: Uygun datetime formatlarını döndürür. ToLongDate String: LongDate tipinden değer döndürür. ToString: Nesne.ToString(<parametre>) formatı ile DateTime nesnesi katara(string) çevrilir. Compare(parametre1, parametre2): DateTime tipinden parametre1 ve parametre2 değerlerinden hangisinin büyük olduğunu döndürür.  Eğer parametre1  büyükse 1, parametre2  büyükse -1, iki tarih birbirine eşitse 0 değerini getirir. Equals(DateTime): DateTime tipinden bir nesnenin, belirlenen bir diğer DateTime nesnesine eşit olup olmadığı ile ilgili bir değer döndürür. Finalize: Finalize metodu tıpkı destructorlar (yok edici) gibi çalışır, onlardan tek farkı kullanılmayan kaynakları garbage collectorın (çöp toplayıcı) yaptığı gibi otomatik olarak bırakmamasıdır. IsLeapYear: Belirlenen yılın artık yıl olup olmadığını döndürür. Parse (String): Belirlenen bir tarih ve saat katarını DateTime tipinden eşdeğerine çevirir.   DateTime tipi için örnek bir kod parçası aşağıdadır: using System; class Ornek { static void Main() { DateTime zaman = DateTime.Now; Console.WriteLine(zaman.ToLongDateString()); } } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }Belirtilen örnek kod parçası ekrana o anki tarihi dd MMMM yyyy dddd şeklinde yazdıracaktır. (Ör: 08 Ağustos 1990 Çarşamba) Sadece saat, dakika, yıl bilgisine ihtiyaç duyulduğunda ya da belli tarih ve zaman bilgisi düzenlenmek istendiğinde ToString()  metodunun kullandığı temel karakter kulanımları aşağıdaki gibidir:   Format  Örnek Ekran Çıktısı MM/dd/yyyy 04/01/2007 dddd, MMMM, dd, yyyy HH:mm Pazar, Nisan 01, 2007, 02:09 dddd, MMMM, dd, yyyy, HH:mm:ss  Pazar, Nisan 01, 2007, 02:09:05 MM/dd/yyyy HH:mm  04/01/2007 02:09 PM MM/dd/yyyy HH:mm:ss 04/01/2007 02:09:05 PM MMMM dd Nisan 01 ddd, dd MM yyyy HH:mm:ss GMT Paz, 01 Nis 2007 14:09:05 GMT yyyy-MM-dd T HH:mm:ss 2007-04-01 T 02:09:05 HH:mm 02:09 PM HH:mm:ss  02:09:05 PM yyyy-MM-dd HH:mm:ssZ 2007-04-01 02:09:05Z dddd, MMMM, dd, yyyy HH:mm Pazar, Nisan 01, 2007 02:09 yyyy, MMM Nisan, 2007   Temel karakter kullanımları ile ilgili örnek bir uygulama aşağıdadır: using System; class Program { static void Main() { DateTime zaman = new DateTime(1990,8,8,10,42,0); Console.WriteLine(zaman.ToString("d")); Console.WriteLine(zaman.ToString("MM.dd.yyyy HH:mm")); Console.WriteLine(zaman.ToString("ddd,dd MM yyyy HH:mm:ss GMT")); } } Ekran çıktısı aşağıdaki gibi olacaktır: 08.08.1990 08.08.1990 10:42 Çar, 08 08 1990 10:42:00 G8T   DateTime Sınıfı Alanları MaxValue, MinValue: DateTime’ın uygun olan en geniş ve en  küçük değeri ni belirtir. Bu alanlar salt-okunurdur.  DateTime Sınıfı Operatörleri GreaterThanOrEqual, LessThanOrEqual: Belirlenen bir DateTime nesnesinin diğer belirlenen bir DateTime nesnesi ile büyüklük, küçüklük, eşitlik karşılaştırmasını yaparlar. Addition: Belirlenen tarih ve saate, istenilen zaman aralığının eklenmesini sağlar. Subtraction(DateTime, DateTime): Belirlenen bir tarih ve saatten bir başka tarih ve saati çıkarır ve geriye  bir zaman aralığı döndürür.   Bu dokuman Zemre Arslan tarafından hazırlanmıştır. (Orijinal) Tags: , , | Categories: .NET | C#

Ağustos 1020

RadGrid Sayfalama Sorunu

Yakın zamanda bir projemde karşılaştığım bir sorundan size bahsetmek istiyorum. Telerik kütüphenesinde gelen RadGrid sayfalama işlemi yapamıyordum. DataBind() işlemi sonucunda ilk sayfa sorunsuz şekilde geliyordu. Ancak diğer sayfalara geçmek istediğimde sadece beyaz bir ekran geliyordu. Sorunu ViewState ve OnNeedDataSource kullanarak çözdüm. Her sayfa geçisinde veriyi yeniden Bind ediyor. Çözüm örneği aşağıdaki gibidir: ASPX: <telerik:RadGrid ID="RadGrid1" runat="server" AllowPaging="true" PageSize="5" ShowGroupPanel="true" OnNeedDataSource="RadGrid1_NeedDataSource"> <MasterTableView CommandItemDisplay="Top"> </MasterTableView> <ClientSettings AllowDragToGroup="true" AllowColumnsReorder="true" > </ClientSettings> </telerik:RadGrid> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Filter"/> CS: protected void RadGrid1_NeedDataSource(object source, GridNeedDataSourceEventArgs e) { if (ViewState["GridData"] != null) { RadGrid1.DataSource = ViewState["GridData"]; } } protected void Button1_Click(object sender, EventArgs e) { string connStr = "Data Source=MyData; Initial Catalog=NorthWind; User ID=***; Password=*****"; SqlConnection conn = new SqlConnection(connStr); SqlCommand cmd = new SqlCommand(); conn.Open(); SqlDataAdapter adp = new SqlDataAdapter("select * from Products", conn); DataTable dt = new DataTable(); adp.Fill(dt); ViewState["GridData"] = dt; if (ViewState["GridData"] != null) { RadGrid1.DataSource = ViewState["GridData"]; } RadGrid1.DataBind(); conn.Close(); } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Tags: , , | Categories: Telerik | ASP.NET | C# | .NET
Silverlight, web tabanlı uygulamaların hazırlanabilmesi için Microsoft tarafından üretilen bir teknoloji platformudur. Silverlight ile ilgili daha detaylı bilgi buradan alınabilir. Web tabanlı File Upload (Dosya yükleme) ile herhangi bir bilgisayar üzerinden Web sunucusuna dosya yüklenebilir. Böylece yüklenen dosya İnternet üzerinden erişilebilir hale gelecektir.   Öncelikle Visual Studio 2010 açılarak New Project (Yeni Proje) seçilir. Gelen ekrandan Visual C# altındaki Silverlight sekmesi seçilir. Yanda beliren Silverlight Application (Silverlight Uygulaması) seçilir. Alltaki kısımda Name (İsim) karşısına bir isim verilerek OK (Tamam) düğmesine tıklanır. Gelen ekranda OK (Tamam) düğmesine tıklanır. Oluşturulan projenin "Solution Explorer" kısmından, proje_ismi.Web satırına sağ tıklanarak Properties (Özellikler) satırına tıklanır. Açılan pencereden Web sekmesi seçilerek, Servers (Sunucular) kısmındaki Specific Port (Özel Port) seçilerek 1336 yazılır. Burada belirli bir port numarası verilmesinin nedeni; Visual Studio’nun web servisini eklerken localhost (yerel sunucu) adresini kullanmasıdır. Tek bir port adresi vererek adresin değişmesini önleyip Web servisi projeye eklenir. Daha sonra araç çubuğundan Save(Kaydet) düğmesine tıklanarak Özellikler sayfası kapatılır.   Tekrar  Solution Explorer kısmından, proje_ismi.Web satırına sağ tıklanarak Add (Ekle) -> New Item (Yeni Nesne) seçilir. Gelen pencerede Web Service (Web Servisi) seçilerek Name (İsim) kısmı doldurulur. Oluşturulan Web sayfası için aşağıdaki kodlar yazılır. Dosyanın yükleneceği yer kod içinde bulunan Yükleme Dizini kısmına yazılmalıdır.  (Örnek:”C:\\”) using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.IO; namespace FileUpload.Web { [WebService(Namespace = http://tempuri.org/)] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] public class uploadService : System.Web.Services.WebService { [WebMethod] public string UploadFiles(string strFileName, byte[] byFile, string strFileNo) { try { if (byFile.Length > 0) { string strFilePath = "C:\\" + strFileName; System.IO.FileStream fs = new FileStream(strFilePath, FileMode.Create, FileAccess.Write); fs.Write(byFile, 0, byFile.Length); fs.Close(); return strFileNo; } else { return ""; } } catch { return ""; } } } } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Solution Explorer bölümünden FileUpload satırına sağ tıklanarak Add (Ekle)-> New Item (Yeni Nesne) seçilir. Açılan pencerede Class (Sınıf) seçilerek, Name (İsim) kısmı doldurulur. OK (Tamam) a tıklanır. Oluşturulan sınıfın kodları aşağıdaki gibidir. using System; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.IO; namespace FileUpload { public class FilesClass { public FilesClass() { } string strStatus = ""; string strNo = ""; FileInfo strFileName = null; public string PropNumber { get { return strNo; } set { strNo = value; } } public FileInfo PropFileName { get { return strFileName; } set { strFileName = value; } } public string PropStatus { get { return strStatus; } set { strStatus = value; } } } } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Referans dosyasını projeye eklemeden önce Solution Explorer(Çözüm Gezgini) de Solution File Upload(Çözüm Dosyası Yükle) satırına sağ tıklanarak Build seçeneği tıklanır. uploadService.asmx dosyasını projeye eklemek için Çözüm Gezgini'nde FileUpload satırına sağ tıklanır. Add Service Referance (Servis Referansı Ekle)  seçilir. Gelen ekranda Discover (Keşfet) düğmesine tıklanır ve referans dosyası çıkarılır.   Daha sonra Go düğmesine tıklanarak referans eklenir. Alttaki Name (İsim) kısmı doldurulur. OK (Tamam)  denilerek ekran kapatılır. Çözüm Gezgini'nde MainPage.xaml açılır. XMAL sekmesindeki kodların Grid "tag"ları arasına aşağıdaki kodlar yazılır. Bu kodlarla Gözat ve Yükle adında iki düğme oluşturulacaktır. <Grid x:Name="LayoutRoot" Background="White" Width="400" Height="50"> <Button Content="Gözat" Height="20" Width="150" Click="Button_Click" Margin="10,0,10,10" VerticalAlignment="Bottom" d:LayoutOverrides="Width,Height" HorizontalAlignment="Left" Background="#FF2770AF"></Button> <Button Content="Yükle" Height="20" Width="150" Click="Button_Click_1" Margin="20,0,10,10" VerticalAlignment="Bottom" d:LayoutOverrides="Width, Height" HorizontalAlignment="Right" Background="#FF2770AF"></Button> </Grid> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Design (Tasarım) kısmında oluşan Gözat ve Yükle düğmelerinden Gözat düğmesine tıklanarak MainPage.xaml.cs dosyası açılır. Burda Gözat düğmesi için otomatik olarak event (olay) oluşturulmuştur. Oluşturulan olayın üst kısmına aşağıdaki kodlar yazılır. private int iFileCount = 0; private List<FilesClass> fl = new List<FilesClass>(); .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Oluşturulan bu olayın içi aşağıdaki gibi doldurulur. private void Button_Click(object sender, RoutedEventArgs e) { OpenFileDialog op = new OpenFileDialog(); op.ShowDialog(); if (op.File != null && op.File.Name != "") { if (op.File.Length < 1048576) { FilesClass obj = new FilesClass(); obj.PropFileName = op.File; obj.PropNumber = iFileCount.ToString(); fl.Add(obj); iFileCount++; } else { MessageBox.Show("En büyük dosya boyutu 1 MB"); } } else { MessageBox.Show("Dosya seçiniz."); } } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Tekrar MainPage.xaml sayfasına dönülerek Design (Tasarım) sekmesine tıklanır. “Yükle” düğmesine tıklanarak MainPage.xaml.cs dosyasında Yükle için olay oluşturulur. Yükle düğmesi için oluşturulan olayın içi aşağıdaki gibi doldurulur. private void Button_Click_1(object sender, RoutedEventArgs e) { if (fl.Count > 0) { for (int count = 0; count < fl.Count; count++) { uploadService.uploadServiceSoapClient x = new uploadService.uploadServiceSoapClient(); x.UploadFilesCompleted += new EventHandler<uploadService.UploadFilesCompletedEventArgs> (UploadFileComplted); FilesClass obj = (FilesClass)fl[count]; System.IO.FileStream str = obj.PropFileName.OpenRead(); byte[] by = new byte[str.Length]; str.Read(by, 0, by.Length); str.Close(); x.UploadFilesAsync(obj.PropFileName.Name, by, obj.PropNumber); } } } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Upload (Yükleme) işleminin başarılı biçimde bittiğini belirten mesaj kutusunu çıkaran kod için “Yükle” düğmesi için yazılan kodun altına aşağıdaki kod yazılır. private void UploadFileComplted(object sender, uploadService.UploadFilesCompletedEventArgs e) { if (e.Result != "") { MessageBox.Show("Dosya Yüklendi"); } } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Dosyalar araç çubuğundaki SaveAll (Hepsini Kaydet) ile kayıt edilir ve yine araç çubuğundaki StartDebuging (İşlemeye Başla) simgesine tıklanarak yazılan proje çalıştırılır. Projenin son görüntüsü aşağıdaki gibidir. Dosya yüklemek için Gözat düğmesine tıklanarak yüklenecek dosya seçilir. Dosya seçildikten sonra Yükle düğmesine tıklanarak kodda belirtilen yere dosya yükleme işlemi gerçekleştirilmiş olur.   Bu dokuman Erk Dursun tarafından hazırlanmıştır. Alıntı Tags: , , , , | Categories: .NET | C# | ASP.NET | Silverlight
MVC (Model View Controller), oluşturulan sitede kimlik doğrulaması ve yetkilendirme işlevini kolaylıkla sağlar. Sadece kimliği doğrulamış kullanıcılar sitenin izin verilen kısmına erişebilirler. Controller (kontrol) içinde tanımlanan yetkilendirme ile her view (görünüm) farklı kişilerin erişimine açılabilir. Bir MVC uygulaması gerçekleştirebilmek için bilgisayarda Visual Studio 2008 SP1 yüklü olması gereklidir. Standart bir MVC uygulaması yapabilmek için daha önceki yazıma bakabilirsiniz. Öncelikle File (Dosya) -> New Project (Yeni Proje) adımlarından sonra açılan pencereden ASP.NET MVC Web Application (ASP.NET MVC Web Uygulaması) seçilerek proje oluşturulur. Bir sonraki adımda test projesi istenilip istenmediğini soran pencere gelir. Burada test projesi istenilmediğine dair seçim yapılır. (Visual Web Developer sürümlerinde bu pencere çıkmaz.) Proje oluşturulduktan sonra güvenlik ayarlarına ulaşabilmek için derlenmesi gerekir. Bunun için “F5” tuşuna basılması yeterli olur. Derleme sonrasında açılan pencere kapatılır. Kullanıcıları ve yetkilendirmeleri oluşturmak için ASP.NET Configuration (ASP.NET Yapılandırması) seçeneğine tıklanır. Açılan Web Site Administration Tool (Web Sitesi Yönetim Aracı) içinde Security (Güvenlik) sekmesi seçilir. Eğer veritabanı sorunu yoksa alttaki sayfa gelir. Burada ayarlamaları Security Wizard (Güvenlik Sihirbazı) ile adım adım yapılabilir. Seçeneğe tıklandıktan sonra gelen bilgilendirme ekranında Next (İleri) seçeneği tıklanır.   Sonraki adımda "from internet" (internet üzerinden) seçeneği seçilir ve devam edilir. Advanced Provider Settings (Gelişmiş Sağlayıcı Seçenekleri) basamağı atlandıktan sonra Define Roles (Yetkili Grupları Tanımla) adımı gelir. Burada Enable Roles (Yetkili Grupları Etkinleştir) seçeneği işaretlenir. Next (İleri) seçilir.     Bir sonraki adımda yetkili gruplarının (Roles) oluşturulacağı bölüm gelir. Burada yetkili grubu adının girilip Add Role (Yetkili Grubu Ekle) seçilir. Sıradaki adımda isteğe bağlı olarak kullanıcılar eklenebilir. Kullanıcılar kendilerini İnternet üzerinden de kaydedebilir. Kullanıcı eklemek için kullanıcının bilgileri girilir ve Create User (Kullanıcı Oluştur) seçilir.   Sonraki adımda hangi klasörlere kimlerin ulaşıp kimlerin ulaşamayacağına dair yetkilendirme yapılır. Yetkilendirmenin yapılacağı klasör ve yetkili seçildikten sonra Allow (İzin ver) ya da Deny (Yasakla) seçilir. İşlemi tamamlamak için Add This Rule (Bu yetkilendirmeyi ekle) seçilir.   Sihirbaz ile adım adım oluşturmayı bitirdikten sonra bazı kullanıcıları ve bazı yetkilendirme sınıfları oluşturmuş olur. Security (Güvenlik) sekmesinden Manage Users (Kullanıcıları Yönet) seçilir. Gelen ekranda istenirse kullanıcı eklenir, kullanıcılar yetkilendirilir ya da silinebilir. Edit Roles (Yetkileri Düzenle) seçildikten sonra kullanıcının eklenmek istenildiği yetkili grubu seçilir. Kullanıcılar ve yetkilendirmeler oluşturulduktan sonra erişimin nasıl sınırlandırılacağı belirlenir. "Proje" altında "Controllers" klasörünün içindeki “HomeController.cs” dosyası açılır.   Burada Index() (Anasayfa) ve About() (Hakkında) dosyaları hazır olarak gelir. Bunların altına sayfalar (View) eklenebilir. Ekledikten sonra "public" (genel) komutlarının önüne [Authorize] (yetkilendir) eklenirse o sayfa için kimlik doğrulama yapılır. Bu komuta parametreler eklenerek belirli kullanıcı ya da yetki grupları haricindekilerin sayfaya erişimi engellenebilir. namespace Proje.Controllers { [HandleError] public class HomeController : Controller { public ActionResult Index() { ViewData["Message"] = "Welcome to ASP.NET MVC!"; return View(); } [Authorize] public ActionResult About() { return View(); } [Authorize(Roles="admin")] public ActionResult AdminSayfasi() { return View(); } [Authorize(Users="kullanici1")] public ActionResult Kullanici1kisisel() { return View(); } } } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Yukarıda yazılan (Roles=”admin”) sadece "admin" yetki grubundakilerin sayfaya erişimine izin verir. (Users=”kullanici1”) ise sadece kullanici1’e izin verir. Bunları HomeController.cs içine ekledikten sonra eklenen sayfa isimlerine sağ tıklanarak, “Add view…” (Görünüm ekle) seçilir. Gelen ekranda Add(Ekle) tuşuna basılır.   Projenin Views(Görünüm) klasörü içindeki "Home" klasörü içinde bulunan “Index.aspx” açılır.   Anasayfa olan (Index.aspx) içine yeni oluşturulan sayfaların bağlantısı eklenir. <asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server"> <h2><%= Html.Encode(ViewData["Message"]) %></h2> <p>To learn more about ASP.NET MVC visit <a href=http://asp.net/mvc title="ASP.NET MVC Website">http://asp.net/mvc</a></p> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Views/Home/AdminSayfasi.aspx">HyperLink</asp:HyperLink> <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/Views/Home/Kullanici1kisisel.aspx">HyperLink </asp:HyperLink> </asp:Content> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Views -> Home altında oluşturulan her dosyanın içeriği istenildiği gibi ayarlanabilir. Her View() üstünde ayrı yetkilendirme yapılabilir. Kullanıcılar siteye ulaşmak istediklerinde aşağıdaki gibi bir parola ekranı ile karşılaşırlar.   Bu yazı Cem Bozkurt tarafından hazırlanmıştır. Tags: , , , | Categories: C# | Microsoft | .NET
ASP.NET Framework 3.5 ile gelen DataPager (Veri Sayfalayıcı) kontrolü; Gridview (Izgara Görünümü), ListView (Liste Görünüm) gibi  veri bağlama denetimlerini sayfalandırmak için kullanılan bir kontroldür. DataPager (Veri Sayfalayıcı) kontrolü sayfalandırma şeklinin ve bağlantılarının kişiselleştirilmesine olanak sağlar. Bu kontrolde kullanılabilecek öznitelikler; PagedControlID (Sayfalanacak Kontrolün Kimliği): Sayfalandırılacak kontrolün kimliğini belirtir. PageSize (Sayfa Boyutu): Her sayfada gösterilecek veri sayısını tanımlamak için kullanılır. Fields (Alanlar): Kontroldeki sayfalandırma alanını bildiren nesneleri içinde barındırır. NextPreviousPagerField (İleri Geri Sayfalama Alanı): Sayfalandırma alanına; ilk, ileri, geri, son şeklinde bağlantılara eklenmesini sağlar. NumericPagerField (Numaralandırlılmış Sayfalama Alanı): Sayfalandırma alanında, sayfalara sayfa numaralarıyla bağlantı verir. Aktif olan sayfanın bağlantısı pasiftir. TemplatePagerField (Sayfalama Alanı Şablonu): Yazılımcının, istenilen şekilde sayfalama ara yüzü tasarlamasına olanak sağlar. Uygulama Bu uygulamada, DataPager (Veri Sayfalayıcı) örnek SQL veritabanı üzerinde çalışan ListView (Liste Görünümü) kontrolünü sayfalandırmak için kullanılacaktır. Uygulamada kullanılacak örnek veritabanının yapısı şu şekildedir; Sayfalandırılacak ListView (Liste Görünümü) kontrolü aşağıdaki gibidir. <asp:ListView ID="OgrencilerListe" DataSourceID="OgrencilerData" runat="server"> <ItemTemplate> isim: <asp:Label ID="isimLablel" runat="server" Text='<%# Eval("isim") %>'/> <br /> numara: <asp:Label ID="numLabel" runat="server" Text='<%# Eval("numara") %>'/> <br /> <br /> </ItemTemplate> <LayoutTemplate> <div ID="itemPlaceholderContainer" runat="server" style=""> <span ID="itemPlaceholder" runat="server"> </span> </div> </LayoutTemplate> </asp:ListView> OgrencilerListe kimlikli liste kontrolünü ilk sayfa, sayfa numaraları ve son sayfa şeklinde sayfalama yapacak ve ekrandaki kayıtlar hakkında bilgi verecek DataPager (Veri Sayfalayıcı) kontrolü aşağıdaki gibidir. Her sayfadaki veri sayısı PageSize (Sayfa Boyutu) ile beş olarak tanımlanmış olup sayfalanacak veri PagedControlID (Sayfalanacak Kontrolün Kimliği) ile belirtilmiştir. <asp:DataPager ID="OgrencilerSayfalayici" PagedControlID="OgrencilerListe" runat="server" PageSize="5"> <Fields> <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" ShowNextPageButton="False" ShowPreviousPageButton="False" ShowLastPageButton="False" /> <asp:NumericPagerField /> <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="False" ShowNextPageButton="False" ShowPreviousPageButton="False" ShowLastPageButton="True" /> <asp:TemplatePagerField> <PagerTemplate> <asp:Label ID="ilkData" runat="server" Text="<%# Container.StartRowIndex + 1 %>" /> ile <asp:Label ID="sonData" runat="server" Text="&lt;%# ((Container.StartRowIndex + Container.PageSize > Container.TotalRowCount) ? (Container.TotalRowCount) : Container.StartRowIndex + Container.PageSize)) %>" /> arası kayıtlar gösterilmektedir. </PagerTemplate> </asp:TemplatePagerField> </Fields> </asp:DataPager> Veritabanı bağlantısı ise şu şekildedir; <asp:SqlDataSource ID="OgrencilerData" runat="server" ConnectionString="Provider=SQLOLEDB.1;Data Source=.\SQLEXPRESS; Integrated Security=SSPI; InitialCatalog=OrnekDatabase" ProviderName="System.Data.OleDb" SelectCommand="SELECT [isim], [numara] FROM [OrnekTablo]"> </asp:SqlDataSource> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }     Bu yazı M. Cem Tüver tarafından hazırlanmıştır. Tags: , , , | Categories: .NET | C# | ASP.NET
Model View Controller (MVC), kullanıcıya yüklü miktarda verinin sunulduğu karmaşık uygulamalarda veri ve gösterimin soyutlanması esasına dayanır. Böylelikle veriler (model) ve kullanıcı arayüzü (view) birbirini etkilemeden düzenlenebilir. Model-view-controller, bunu controller adı verilen ara bileşenle, veri gösterimi ve kullanıcı etkileşiminden, veri erişimi ve iş mantığını çıkarma suretiyle çözmektedir. Bir MVC uygulaması gerçekleştirebilmek için bilgisayarımızda Visual Studio 2008 SP1 yüklü olması gereklidir. MVC Framework için ise bu linkten gerekli güncel dosyayı indirip yükleyebilirsiniz. Projede kullanacağımız veri tabanını aşağıdaki şekildeki gibi oluşturduk. Tablonun Identity Column (Kimlik Sütunu) özelliğine Id değerini atadık. Daha sonrasında da denemeler yapabilmek için elimizle birkaç veri girdik. File->New Project adımlarından sonra açılan pencereden ASP.NET MVC Web Application seçerek projemiz oluşturulur. Bir sonraki adımda bize test projesi isteyip istemediğimizi soracak olan pencere geldi karşımıza. Burada test projesi istemediğimizi seçtik. (Visual Web Developer sürümlerinde bu pencere bizim karşımıza çıkmayacaktır.) Böylece projemizin ilk halini yaratmış olduk. MVC Framework’ün bize sağladığı kayıt listeleme, yeni kayıt oluşturma ve kayıt düzenleme özelliklerini daha rahat görebilmek için Controllers\HomeController.cs dosyasını ve Views\Home dizinini daha sonra tekrar yaratmak üzere sildik. MVC projemizi gerçekleyebilmek için bir veritabanı bağlantısına modelini oluşturmak için ADO.NET Entity Data Model kullandık. Bu modeli ekleyebilmek için Solution Explorer’daki Models klasörü üstünde sağ tıklayarak Add New Item seçeneğini seçtik. Karşımıza çıkan ekranlarda sırasıyla; Generate From Database Choose Your Data Connection ekranında veri tabanını seçiyoruz. Choose Your Database Object ekranında table seçeneğinden kullanacak olduğumuz Araba tablomuzu seçerek işlemimizi tamamladık. Sonuçta Models dizini altında NorthwindModel.edmx adında bir dosya oluştu. Modelimizin Column Mapping (Sütun haritalandırma) bölümünde tablomuza karşılık gelen tablo aşağıda olduğu gibi otomatik olarak oluştu.   Bu sayede projemize veri tabanı bağlanmış oldu. Bu bağlantımızı MVC kullanarak formlar halinde verilerimiz üzerinde değişiklik yapabileceğiz. MVC kontrollerimizi ekleyebilmek için Solution Explorer’da Controllers klasörünün üzerinde sağ tıklayak Add->Controller adımlarını izleyerek yeni bir sınıf yaratıyoruz.   Daha önce sildiğimiz HomeController adındaki kontrolü tekrardan yarattık. Bu esnada Index, Create, Edit metotları içleri boş şekilde otomatik olarak oluşturuldu. HomeController sınıfı içinden veri tabanına bağlanabilmek için; private NorthwindEntities db = new NorthwindEntities(); kod parçacığını ekledik. Daha sonra “db” kullanarak veri tabanından gerekli veri çekme işlemini gerçekleştireceğiz. Veri tabanımızdaki verilerimizi listeleyebilmek için Index() metodunu kullandık. Bu metot aşağıdaki şekilde değiştirdik. public ActionResult Index()         {             return View(db.Araba.ToList());         } Metodun ismi üzerinde sağ tıklayarak Add View seçeneğini seçtik. Açılan ekranı aşağıdaki şekildeki gibi doldurduk. Listeleme işlemi yapacağımız için içerik olarak List seçeneğini seçtik. Bu sayede Views/Home dizini altında listeleme yapılacak Index.aspx sayfasını otomatik olarak oluşturuldu. Oluşturulan sayfa içerisindeki kodların hiç birinde değişiklik yapılmadı. Ekran çıktısı olarak bunu aldık. Yeni kayıt oluşturmak için Create() metodunu ve aşırı yüklenmiş ve sunucu post yolu ile haberleşen Create() metodunu gerçekledik. public ActionResult Create()         {             return View();         }             [AcceptVerbs(HttpVerbs.Post)]           public ActionResult Create([Bind(Exclude="Id")] Araba arabaToCreate)         {             if (!ModelState.IsValid)                 return Create();             try             {                 db.AddToAraba(arabaToCreate);                 db.SaveChanges();                   return RedirectToAction("index");             }             catch             {                 return View();             }         } View oluşturmak için Index() metodunda kullandığımız yöntemi kullanıyoruz. İçerik olarak bu kez Create seçeneğini seçtik. Bu sayede Views/Home dizini altında listeleme yapılacak Create.aspx sayfasını otomatik olarak oluşturuldu. Oluşturulan sayfa içerisindeki kodların hiç birinde değişiklik yapılmadı. Ayrıca otomatik olarak alan kontrolü yapan kontrollerde sayfamıza yerleştirilmiş durumda. Id seçeneğinde uyarı vermemesinin sebebi aşırı yüklenmiş metodu oluştururken Id değerinin otomatik artırılacağı şeklinde ayar yapmamızdı. Bu kutuya herhangi bir değer girilse dahi yeni kayıt için Id değerini en son Id değerinin bir fazlası şeklinde veri tabanına kayıt edilecektir. Kayıt düzenleme için de Edit() metodunu kullanacağız. Create’de olduğu gibi bir tane normal ve bir tane de aşırı yüklenmiş metodumuz var. Birincisi Id ‘den yararlanarak düzenlenecek olan kayıta ilişkin verileri form kontrollerine bind eder. İkincisi ise form kontrollerine bind edilmiş olan veriler üzerinde yapılmış olan değişiklikleri günceller.         public ActionResult Edit(int id)         {             var arabaToEdit = (from n in db.Araba                                where n.Id == id                                select n).First();               return View(arabaToEdit);         }           [AcceptVerbs(HttpVerbs.Post)]         public ActionResult Edit(Araba arabaToEdit)         {            if (!ModelState.IsValid)            return View();            try            {               var arabaEdit = (from m in db.Araba                        where m.Id == arabaToEdit.Id                        select m).First();               db.ApplyPropertyChanges(arabaEdit.EntityKey.EntitySetName, arabaToEdit);               db.SaveChanges();                 return RedirectToAction("Index");             }             catch             { return View(); }         }   Diğer metotlarda olduğu gibi View’imizi oluşturduk. İçerik olarak bu kez Edit seçeneğini seçtik. Bu sayede Views/Home dizini altında listeleme yapılacak Edit.aspx sayfasını otomatik olarak oluşturuldu. Oluşturulan sayfa içerisindeki kodların hiç birinde değişiklik yapılmadan aşağıdaki çıktıyı aldık. Tags: , | Categories: .NET
Bu yaz yaptığım stajda karşıma çıkan bir problemden bahsetmek istiyorum bu sefer. MsSQL veri tabanımız var, veri tabanımızda projemizin temelini oluşturan nesnenin tablosu var. Bu tabo içinde de image türünden veri saklayan sütunumuz var. Kaydetmek istediğimiz resmi, başarılı bir şekilde byte[] olarak tablomuza kaydediyoruz. Peki, bunu .aspx sayfasında nasıl gösterebiliriz ? Bunun bir çok cevabı olabilir. Ben size bana en kolay gelen yolu göstereceğim. Öncelikle ResimGoster.aspx adında bir sayfa oluşturuyoruz.  Bu sayfayı, resim göstermek istediğimiz sayfa içerindeki image objesinin ImageUrlsine bağlıyoruz. Tabiki sonuna veritabanındaki çekmek istediğimiz resmin satır ID’sini (genellikle Guid cinsindenir,  tablo oluşturuluş şekine göre int de olabilir) eklemeyi unutmuyoruz. <asp:Image ID="IMG" runat="server" ImageUrl='<%# Eval("ObjectId","ResimGoster.aspx?Id={0}")%>' />   ResimGoster.aspx sayfanın içine hiç birşey eklemeden code behind a doğru gidiyoruz. Esas iş burada. Öncelikle QueryString ile Id değerimizi çekiyoruz. Page_Load aşamasında da elde ettiğimiz Id değerini kullanarak, veri tabanımızdan resmimizi çekiyoruz. nesne _nesne = Provider.Getnesne(Id); Response.ContentType = "text/image"; Response.BinaryWrite(_nesne.Resim);   Not: Provider, BasePage ile gelen ve veri tabanına bağlantımızı sağlayarak istediğimiz veriyi çekmemizi sağlayan bir sınıftır. Kendimiz oluşturuyoruz. Tags: | Categories: .NET
Message Digest 5 (MD5) algoritması, verilen dosyanın veya mesajın (şifre vb.) kendine has “parmak izi” nin oluşturulmasını hash fonksiyonlarına dayalı olarak sağlayan bir algoritmadır. 1991 yılında MIT’de görev yapan Profesör Ron Rivest tarafından geliştirilmiştir. Profesör Rivest MD5’i MD4’ün bir üst sürümü olarak tasarlamıştır. Özellikleri MD5 algoritması tek yönlü çalışır. Şifreleme yapar, ancak şifre çözüm işlemi yapılamaz. MD5 algoritması, üzerinde işlem yapılan dosyada (aktarma vb.) herhangi bir değişiklik olup olmadığını tespit eder.  Eğer bir değişiklik yapılmışsa, yeni dosyanın MD5 algoritmasından geçilmesinden çıkan sonuç ile ilk dosyanın MD5 sonucu birbirinden farklı olacaktır. MD5 algoritması bir alt sürümü olan MD4’e göre yavaş çalışır, ancak şifrelendirme sistemi çok daha karışık ve çözülmesi güçtür. Genel olarak 4 farklı aşamalı bir sisteme sahiptir. Her aşama birbirinden farklı işleyişe sahip olup 16’şar basamaktan oluşmuştur. Bir MD5 şifreleme işleminde aşağıdaki resimdeki sistemden 64 tane gerçekleşmektedir. Boyutu fark etmeksizin algoritmaya girişi yapılan dosyanın çıkışı olarak 128-bit uzunluğunda 32 karakterli 16'lık sayı sisteminde bir dizi elde edilir. Kullanıldığı Yerler Bütünlük (integrity) denetimi yapımı Güvenli şifre saklama sistemleri Kullanıcı adı ve şifresiyle giriş yapılan sitelerde sunucu makineye şifre gönderimi Dezavantajı Kullanıcı adı ve şifre ile giriş yapılan sitelerde, kullanıcı şifresini unuttuğu takdirde sistem eski şifreyi veremez. Şifre, MD5 algoritmasından geçirilmiş halde saklandığı için, şifre çözülemez. Sistem kullanıcıya yeni şifre atar. Brute Force Saldırılar Brute Force saldırısı, sistem veri tabanlarında MD5 algoritmasından geçirilmiş halde saklanan şifreleri, belirli tahminler yürüterek (6 tane rakamdan oluşur, 3 tane büyük harf ve 2 rakamdan oluşur, vb.) önceden hazırlanmış karakter setli algoritmalar çerçevesinde bulmaya çalışan bir saldırı türüdür. Muhtemel bir saldırıda, 10 karakterli bir şifrede büyük harf, küçük harf, rakam ve özel karakterlerin oluşturacakları birleşim sayısı çok fazla olacağından Brute Force saldırıların şifreyi bulma süresi çok uzun olacaktır. Yeni geliştirilen sistemler, olası sistem açıklarından yararlanarak kullanıcılarının şifrelerini ele geçirenlerin başarılı olma şanslarını en aza indirmek için şifreleri şifreledikten sonra şifrelenmiş şekilleri tekrar şifrelemektedirler. MD5(MD5(MD5......(MD5(kullanıcı şifresi))……)) MD5 Tabloları ve RainbowCrack Projesi RainbowCrack projesi büyük harf, küçük harf, rakam ve özel karakterlerin kendi içlerinde oluşturabilecekleri olasılıklar düşünülerek, 1 karakterli olanlardan başlanıp sonsuz karakterli olabilecek tüm şifrelerin MD5 algoritmasından geçirilmiş şekillerinin bir tabloda biriktirilmesidir. Bu proje sayesinde MD5 algoritmasından geçirilmiş şekli bilinen bir dosyanın boyutu ve neler içerdiği veya şifrelenmiş kullanıcı şifresinin kendisi saniyeler içinde tespit edilebilir. Ancak oluşacak olan olasılıklar çok fazla olduğundan bu proje bitirilememektedir. .NET Teknolojisi ile MD5 Şifreleme .NET teknolojisi ile yazılım geliştirenler, herhangi bir veride şifreleme yapmak için .NET Framework içerisinde yer alan System.Security.Cryptography kütüphanesini kullanmaktadırlar. Bu kütüphane içerisinde yer alan fonksiyonlar sayesinde, yazılımcı istediği platformda güvenli bir şekilde veri şifreleme ve şifre çözümleme yapabilmektedir. Yazılım geliştiricinin MD5 algoritmasını kullanarak şifreleme yapabilmesi için MD5CryptoServiceProvider sınıfını kullanması gerekmektedir. Aşağıda C# dilinde yazılmış örnek bir Windows uygulamasının kod parçacıkları yer almaktadır: class Sifreci    {        private static byte[] ToByteArray(object value)        {            byte[] result = new byte[] { };            string val = value as string;            if (val != null)                result = new System.Text.UnicodeEncoding().GetBytes(val);            return result;        }         public static string ToMD5(string value)        {            byte[] hash = new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(ToByteArray(value));            string result = System.BitConverter.ToString(hash);            result = result.Replace("-", "");            return result;        }     }  namespace MD5_Uygulama{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private void button1_Click(object sender, EventArgs e)        {            label1.Text = Sifreci.ToMD5(SifreKutusu.Text);        }    }} Bazı MD5 şifreleme örnekleri şifre: 1234MD5 Hash: 0F037584C99E7FD4F4F8C59550F8F507 şifre: itu2008MD5 Hash: 19626844AEDCA2286F2932D85EDC8EED şifre: ITU2008MD5 Hash: 0C5C136E08F3E9D0E77B2B2C3CD5475C şifre: 123aBc?=MD5 Hash: 35D2C8F7CF2487EF3B9051A982ED81F0 Tags: | Categories: .NET