WORKFLOW FOUNDATION (WWF) 4.0 GİRİŞ – 2

Workflow Giriş 1 deki örnek entityler üstünden konuyu biraz daha detaylandıralım

Peşpeşe işlemler yapacak bir workflow örneği yapalım

Bunun için Toolboxtan  — >Control Flow– >Sequence activity Activity Builderımız içine(Activity1.xaml diye oluşturduğumuz xaml dosyası içine) sürükle bırak yapıyoruz

Şöyle bir senaryomuz olsun;

Bir üniversitede eğer gelen kişi öğrenci ise 5 lira ,öğretmen ise 10 lira olarak ödenecek menü

bedeli olsun.Bunun için Scope Sequence olacak şekilde bir variable tanımlayalım ve ismi OdenecekTutar olsun.Ve workflowa değer alabilmek için PersonArgument isimli bir bir argüman tanımlayalım.(Argüman ve variable arasındaki farkları  WORKFLOW FOUNDATION (WWF) 4.0 GİRİŞ – 1 makalesinde mevcuttur)

Daha sonra Sequence içine yine Toolbox– >Control Flow– >If kontrolü sürekle bırak yapıyoruz.Ifin içindeki then ve else kısımlarında koşulumuza göre OdenecekTutar ımızın değerini belirleyeceğimiz için Toolbox — >Primitives içinden Assign kontrolünü atıyoruz

If Condition kısmının expressionına PersonArgument.PersonType = 1

Yazıyoruz.Ve bizim senaryomuza göre PersonType 1 se Öğrenci,2 seyse Öğretmen olsun ve OdenecekTutar Variables da buna göre 5 veya 10 olacak.Bunu belirlediğimiz kısım ise if kontrolün blokları içine yerleştirdiğimiz Assign kontrolünde To ve Value alanlarına gereken değeri vermektir.En son olarak ise WriteLine ödenecek tutarı ekrana yazdırıyoruz.

Program cs içerisinde ise yine workflowa gelecek Argumentin değerini ve invoke edeceğimiz xaml dosyamızın adını belirtiyoruz.

Student p = new Student { Name = “Bilgehan”, Age = 26, PersonType = 1,StudentNumber=”357″ };

Dictionary<string, object> argumentlist = new Dictionary<string, object>();

argumentlist.Add(“PersonArgument”,p);

//WorkflowInvoker.Invoke(new Workflow1(),argumentlist);

WorkflowInvoker.Invoke(new Activity1(), argumentlist);

Console.ReadLine();

.NET kategorisine gönderildi | Yorum bırakın

WORKFLOW FOUNDATION (WWF) 4.0 GİRİŞ – 1

Öncelikle Project–>New Project–>Workflow bölümüne geliyoruz.

Temel bir örnek yapabilmek amacıyla bir Workflow Console Application seçerek projemizi

Oluşturuyoruz.Oluşturduğumuzda bizim Activity Builder olarak kullanacağımız

Workflow1.xaml nesneside otomatik olarak karşımıza gelmektedir.

Dilersek add new item–>workflow–>Activity seçerek benzer xaml dosyalarınıda projemize ekleyebiliriz

Workflow1.xaml dosyasımıza çift tıklayarak açıyoruz.

Variables:Aktiviteler arası paylaşılacak verileri saklamak için kullanılır.Classların memberlarına benzer

Arguments:Variables benzemekle beraber workflowun içeri veya dışarı veri vermesini sağlarlar bir nevi method parametreleri gibidir.

Projemize Entity diye Yeni bir klasör açarak içine nesne modellerimizi oluşturalım

İlk olarak Person nesnesimizi tanımlayalım,benzer şekilde Persondan türeyen Student ve Teacher Nesne modellerinizde

public class Student:Person

{

public string StudentNumber { get; set; }

public int Class { get; set; }

}

public class Teacher

{

public string RegisterNumber { get; set; }

public int WorkingYear { get; set; }

}

İlk Örneğimiz ise Workflowa gelen nesnemizin İsmini ekrana yazdırmak olsun.

Bunun için xaml dosyamıza gelerek Argumentsa PersonArgument isimli bir arguman tanımlıyoruz.Argument Typedan ise bu argümanın tipinin Person tipinde olmasını ayarlıyoruz

Daha sonra Toolboxtan Primitives altında WriteLine activity xamlimiz içine sürükle bırak yapıyoruz.WriteLine Text kısmına PersonArgument.Name diyoruz.PersonArgumentin tipini Person olarak belirttiğimiz için Person içindeki Name ulaşabiliyoruz.

Daha sonra program cs gelerek aşağıdaki gibi kodlarımızı yazıyoruz

Person p = new Person { Name = “Bilgehan”, Age = 26, PersonType = 1 };

Dictionary<string, object> argumentlist = new Dictionary<string, object>();

argumentlist.Add(“PersonArgument”,p);

WorkflowInvoker.Invoke(new Workflow1(),argumentlist);

Console.ReadLine();

Yukarıki kodlarda dikkat edilmesi gereken xamlde tanımlanan argumentleri dictionary içinde gönderiyoruz

WorkflowInvoker.Invoke(new Workflow1(),argumentlist); bu kod sayesinde tanımladığımız xamlin çalışmasını sağlıyoruz.

.NET kategorisine gönderildi | Yorum bırakın

CRM 4 PLUGIN YAZMAK

1-)Öncelikle Microsoftun Sitesinden CrmSdk4 paketini indiriyoruz.

2-)Paketi kurduktan sonra PlugIntemplate kullanabilmek için Sdk klasöründen visualstudiotemplatesàcsàplugin içindekiplugin.zip dosyasını alarak visual studiomuzun project templatelerinde c# klasörünün içine CRM diye bir klasör oluşturuyoruz.Ve Bu zip dosyamızı buraya extract ediyoruz.Böylece artık plugin için visual studiomuzda bir template olmuş oluyor.

My Documents\Visual Studio 2008\Templates\ProjectTemplates\Visual C#\CRMPlugin

2-)Crm Sdkları projeye  referans olarak  veriyoruz

Microsoft.crm.sdk

Microsoft.crm.sdktypeproxy

3-)Template olarak kullanmak istemiyorsanız sdkları ekledikten sonra IPlugin den türetme yapmanızda yeterlidir.Plugin olarak türeyecek sınıf public olmalıdır

public class Post_Create:IPlugin

4-)Plugin dll mutlaka classlibrary–>properties–>signing kısmından imzalanmalıdır

5-)Moniker contexten gelen entitynin Id ve Name alabiliyoruz

Moniker moniker = (Moniker)context.InputParameters.Properties[“EntityMoniker”];

6-) contexten gelen entity ve özelliklerine aşağıdaki gibi ulaşabiliriz

if (context.InputParameters.Properties.Contains(“Target”) &&

context.InputParameters.Properties[“Target”] is DynamicEntity)

if (context.PostEntityImages[“Post_Object”] is DynamicEntity)

{

DynamicEntity entity = (DynamicEntity)context.PostEntityImages[“Post_Object”];

if (entity.Name == EntityName.contact.ToString())

{

if (entity.Properties.Contains(“contactid”))

{

kisiId = ((Key)entity.Properties[“contactid”]).Value;

}

7-)Entityözelliklerini aşağıdaki gibi değiştirebiliriz

if (entity.Properties.Contains(“new_durumu”))

entity.Properties.Remove(“new_durumu”);

entity.Properties.Add(new PicklistProperty(“new_durumu”, new Picklist(1)));

mycrmservice.Update(entity);

8-)Pluginimizi yazdıktan sonra bu plugin crm tanıtmamız gerekmektedir

Bunun için PluginRegistrationTool unu kullanıyoruz

9-)Register New Assembly diyerek pluginimizi crm tanıtıyoruz

Register New Step ile de pluginimizin hangi entitynin hangi eventindeçalışacağınız belirtiyoruz

Stage ile de eventin gerçekleşmesinden sonraki durumda mı önceden mi olacağınız belirtiyoruz

CRM kategorisine gönderildi | Yorum bırakın

MICROSOFT CRM 4 LOOKUP KULLANIMI İÇİN İPUÇLARI

1-)Multi Entity Lookuplarda Kayıt Arama Ekranındaki Entity Sırasını Değiştirmek

Multi Lookuplarda default olarak seçili olan entity belirlemek için sadece Formun Loadına aşağıdaki gibi bir javascript yazmak yeterlidir

crmForm.all.customerid.setAttribute(“defaulttype”, “2”);

2-)Lookuplarda Tooltip kullanabilmek

Lookuplarda bu özelliği kullanabilmek için title özelliğinden faydalanıyoruz.Lookup alandaki seçili değer olmaması ihtimaline karşı null kontrolü yapmak ve hem form açıldığında hemde lookupın değeri değiştiğinde bu özelliği kullanabilmek için Formun Loadında ve Lookup Change eventine aşağıdaki gibi javascript yazmak yeterli olacaktır.

if(crmForm.all.lookupalanid.DataValue !=null)

crmForm.all.lookupalanid.title=crmForm.all.lookupalanid.DataValue[0].name;

Bu özellik özellikle lookupların alan değerini tamamen görüntüleyemediği durumlarda faydalı olacaktır ancak lookup alanlarda text alanlardan farklı olarak değer sadece lookup resminin üstüne gelince görüntülenecektir

CRM kategorisine gönderildi | 1 yorum

MICROSOFT CRM 4 KUYRUK GÖRÜNÜMÜNÜ DEĞİŞTİRME

Özelliştirmelerden form görünümlerini değiştirebilirken bazı özel görünümleri direkt olarak değiştiremeyiz.Bu görünümlerin savedquery tablosundaki IsCustomizable alanıda zaten false olarak işaretlenmiştir

Örnek olarak Kuyruğun görünümünü değiştirmek istediğimizde bunu direkt olarak özelleştirmelerden yapamayacağız

Bunu yapabilmek için crmin toollarından view editorü kullanmamız gerekir

View Editöre ilgili görünümüzün idsini vererek ulaşabiliriz

Bu ViewID bulabilmek için ise öncelikle Entity Tablosundan Kuyruk Item ObjectTypeCodenu buluyoruz

Select * from Entity where Name=’QueueItem’

Daha sonra bulduğumuz ObjectTypeCode, SavedQuery viewindeki ReturnedTypeCode alanında kullanıyoruz

Select * from  SavedQuery where ReturnedTypeCode=2029

Burada bizim değiştirmek istediğimiz Genel kuyruk görünümü olduğu için onun SavedQueryId sini alıyoruz

İd den sonraki kısma SavedQueryId yi ve localhost yazan kısma ise serverınızın adresini vererek vieweditorden kuyruk görünümüne ulaşabilirsiniz

http://localhost/tools/viewEditor/viewManager.aspx?id={00000000-0000-0000-00AA-000010001400}

Burda değişiklikleri yapıp kaydettikten sonra

Crmimizden ayarlardan özelleştirmelere gelerek Tüm Özelleştirmeleri yayımla diyoruz böylece kuyruk görünümünde istediğimiz alanları görünüme koyabiliyoruz

CRM kategorisine gönderildi | Yorum bırakın

ASP.NET THEME(SKIN VE CSS) KULLANIMI

Asp.Net ve Html kontrollerimizin görünümlerini bir merkezden yönetebilmek amacıyla temalardan faydalanırız.

Bunun için öncelikle projemize  Add Asp.Net Folder seçeneğinden Theme folderını ekliyoruz.Tema dosyasına resim,skin ve css dosyalarını ekliyoruz.

Skin dosyaları asp.net kontrollerinin görünüşlerini değiştirmek için kullanılır.

Örnek olarak sayfadaki bütün labellerımızın arka planı kırmızı,yazılarının ise sarı olmasını istiyoruz.Aynı zamanda bütün butonlarımızın arka planlarının mavi yazılarının sarı olmasını istiyoruz.

Bunun için yukarıdaki resimdeki gibi bir skin dosyasını oluşturarak ismini DefaultSkinFile verelim ve içine aşağıdaki gibi kodlarımızı yazalım.

<asp:Label runat=”server” Font-Italic=”true” BackColor=”Red” ForeColor=”Yellow”/>

<asp:Button runat=”server” Font-Italic=”true” BackColor=”Blue” ForeColor=”Yellow”/>

Theme yı sayfa bazlı ya da default olarak web configden okutacak şekilde yazabiliriz.

Sayfaya direkt olarak vermek istiyorsak html olarak page tanımının yapıldığı yere Theme adını vermemiz yeterlidir.

<%@ Page Language=”C#” AutoEventWireup=”true” Theme=”Theme1″  CodeFile=”Default.aspx.cs”

Bunu dedikten sonra resimdede görüleceği üzere sayfada bulunan bütün label ve buttonlarımız standart bir formata geldi ve her biri için ayrı ayrı property ayarı yapmadık

Bu theme  işlemini uygulama bazında bütün sayfalar için yapmak isteseydik web configde system.web altındaki pages kısmını şeklinde yazmamız yeterli olacaktır

<pages theme=”Theme1″>

</pages>

Bütün sayfalarımızın temaya tabi olmasını ancak bir sayfamızın theme almamasını istiyoruz bunun için ise sayfamıza gelerek page ayarları kısmında EnableTheming=”false” yazmamız yeterlidir.

<%@ Page Language=”C#” AutoEventWireup=”true”  EnableTheming=”false”

Bir theme dosyası birden fazla skin dosyasına sahip olabilir.Ancak bir kontrol bir theme için bir kere tanımlanabilir(Eğer SkinID özelliği kullanılmayacak ise).Ancak bir kontrolün farklı görünümler almasını istiyor isek bu sefer SkinID özelliğinden faydalanmamız gerekecektir.Skin dosyamızı açarak iki farklı Label görünümü tanımlıyoruz ve ikisinede farklı skinID ler veriyoruz

<asp:Label runat=”server” Font-Italic=”true” BackColor=”Red” ForeColor=”Yellow” SkinID=”a”/>

<asp:Label runat=”server” Font-Italic=”true” BackColor=”Black” ForeColor=”Yellow” SkinID=”b”/>

Bu şekilde bir skinde aynı kontrol birden fazla geçiyor ise default olarak sayfaya Theme vermek yetmeyecektir.Bütün Label kontrollerine gelerek hangi SkinID ile çalışacağını belirlememiz gerekmektedir.

Sayfamızdaki kontroller ise aşağıdaki gibi olacaktır

    <asp:Label ID=”lblSayi1″  runat=”server” Text=”Sayi1″ SkinID=”a”

                    meta:resourcekey=”lblSayi1Resource1″></asp:Label>

<asp:Label ID=”lblSayi2″ runat=”server” Text=”Sayi2″ SkinID=”b”

                    meta:resourcekey=”lblSayi2Resource1″></asp:Label>

Görüldüğü gibi her label kendi SkinID si belli oldu.

Skin server kontrolleri için kullanılırken genellikle CSS ise sayfa görünümündeki değişiklikler için kullanılır.

CSS oluşturmak için skindeki gibi add new item diyerek StyleSheet dosyasını oluşturuyoruz.Ve içine aşağıdaki gibi örnek kodlar yazıyoruz

body {

}

.label

{

background-color:Red;

color:Yellow;

 }

 .MyDefaultValue

{

color:Yellow;

font-family:Verdana;

background-color:Red;

}

Daha sonra ise sayfamıza bir bu css yerini page head kısmında belirterek controlün cssclassına ise css dosyasında belirlediğimiz kuralın ismini yazıyoruz.Styleları css dosyası yaratmadan sayfa bazlı yapmakta mümkündür.Css server controllerine verdiğimiz gibi table vs html elementlerindede kullanabiliyoruz.

.NET kategorisine gönderildi | 3 yorum

ASP.NET GLOBAL ve LOCAL RESOURCE KULLANIMI VE FARKLARI

Uygulamalarımızda çoklu dil desteği yapmak için global ve local resource dosyalarından faydalarınız.

Genelde uygulamalarda çoklu dil desteği yapmak için bir dropdowndanda dil değiştiğinde uygulamadaki buton,label vs alanların text kısımlarıda değişeceği bir yapı kurulur.

Aşağıdaki gibi örnek bir form oluşturalım.

Daha sonra local resource dosyasını oluşturmak için

Toolsdan — >Generate Local Resource seçeneğine basalım bu sayede otomatik olarak sayfamıza ait resource dosyası oluşacaktır.Bu şekilde generate ettiğimizde otomatik olarak controllere meta:resourcekey eklenerek localizasyon kullanımına hazır hale gelecektir

Bunun yerine asp.net folderlarından App_LocalResources dosyasını ekleyerek içine add new item diyip resource dosyasını manuel de oluşturabiliriz.

Biz default olarak Türkçe kullanacağız ancak İngilizce desteğide istiyoruz bunun için generate dediğimizde oluşan local resource file kopyasını alarak default.aspx.en-Us.resx  şeklinde ismini değiştiriyoruz.en-Us yazan yer her dil için farklı bir kod olacaktır ,İngilizce için bu şekildedir.Daha sonra kontrollerimizin text alanlarını bu dosyada değiştiriyoruz

Bu işlemi yaptıktan sonra istediğimiz dropdown listen seçtiğimiz dile göre sayfanın İngilizce veya Türkçe olması bunun için ise sayfamıza aşağıdaki gibi kodlarımızı eklememiz lazım.

Buradaki kod bloğu msndede mevcuttur.İngilizce olması için ddlDilin ingilizce seçeneğinin valuesu en-Us şeklindedir.

 protected override void InitializeCulture()

    {

        if (Request.Form[“ddlDil”] != null)

        {

            String selectedLanguage = Request.Form[“ddlDil”];

            UICulture = selectedLanguage;

            Culture = selectedLanguage;

            Thread.CurrentThread.CurrentCulture =

                 CultureInfo.CreateSpecificCulture(selectedLanguage);

            Thread.CurrentThread.CurrentUICulture = new

                CultureInfo(selectedLanguage);

            base.InitializeCulture();

        }

    }

Aşağıdaki resimlerdede görüldüğü gibi web sayfasının title özelliğine kadar bile bu yöntemle değiştirebiliyoruz.

Global Resources ise local resource benzemekle beraber aralarındaki fark local resources sayfa bazında kullanılırken global resources birden fazla sayfa için kullanabilirsiniz.Örnek sadece ad,tip,yaratılma zamanı gibi aynı alanları içeren ama farklı formlara sahip yapılarda tek bir global resource dosyası tanımlamak işinize yarayabilir

Bunun içinse projemize asp.net folderlarından App_GlobalResources dosyasını ekliyoruz ve bu dosyanın içine resource dosyamızı oluşturuyoruz.

Ve Butonumuzun değerinin local resource dosyası değilde global dosyadan okunmasını istiyoruz bunun içinse  Texti global dosyadaki değerden okuyacak şekilde ayarlıyoruz

<asp:Button ID=”btnTopla” runat=”server” Text=”<%$Resources:globalResource,ToplaButton %>”

/>

Not:aşağıdaki kod bloğu local resourceden okunacak şekilde meta:resourcekey attribute içerir.Eğer localden değil globalden okuyacak bu attribute olmamalıdır.

<asp:Button ID=”btnTopla” runat=”server” Text=”topla”

                    meta:resourcekey=”btnToplaResource1″  />

 Tabi yine globalresource kullanarak ingilizce yapmak istiyorsak

globalResource.en-Us.resx şeklinde aynı dosyamızın ingilizce değerlerini içerecek en-Us uzantılı resource dosyasını yaratmamız gerekiyor

protected override void InitializeCulture() yine bu metod içindeki kodların olması gerekiyor.

Resimdede görüldüğü üzere aynı sayfada hem global resourceden hem local resourcedan değerler okutmak mümkündür

Not:Local resource otomatik generate ettiğimizde sayfamızın özelliklerinede aşağıdaki gibi eklemeler gelmektedir

<%@ Page Language=”C#” AutoEventWireup=”true”  CodeFile=”Default.aspx.cs” Inherits=”_Default” culture=”auto” meta:resourcekey=”PageResource1″ uiculture=”auto” %>

.NET kategorisine gönderildi | 2 yorum

FLUENT NHIBERNATE DE PARENT-CHILD (MASTER- DETAIL) FORMATTA KAYIT EKLEME(SAVE YONTEMİ))

Aralarında 1 – n ilişki olan varlıklarda child varlıkta parent kayda ilişkin bir Foreign Key tutarız.Dolayısıyla child varlığı ekleyeceğimiz zaman bu Foreign Key değerini vererek gerekli kayıt işlemini gerçekleştirmiş oluruz.Ancak bazı durumlarda parent kayıt eklenirken (Daha henüz databasede yaratılmadan) bu parent kayda bağlı child varlıkları eklemek ve bunların hepsini bir seferde database kayıt olmasını isteyebiliriz.Örnek olarak Bir Master Kayıt Kişi ve buna bağlı Telefonlar ikiside farklı varlıklar olarak düşünülürse kişiyi eklediğimiz anda telefonlarınıda eklemek istiyoruz ve bunuda database iki kere gitmeden tek bir save ile halletmek istiyoruz

Fluent Nhibernate de bunu yapabilmek için aşağıdaki adımlar izlenmelidir

Burada  master entity PersonType ,child Entity Person olarak düşünülmüştür.Amaç Yeni bir persontype yaratırken buna bağlı personlarıda veritabanına ekleyebilmektir.

Birinci varlığımız PersonType içinde childları olan personları barındırıyor

public class PersonType

{

public virtual int ID { get; set; }

public virtual string Name { get; set; }

public virtual ICollection<Person> Persons { get; set; }

}

İkinci varlığımız(child olan) Person ise dikkat edilirse Foreign Keyini direkt int gibi alacak şekilde değil,nesne tabanlı olacak şekilde tasarlıyoruz.

public partial class Person

{

public virtual int ID { get; set; }

public virtual string Name { get; set; }

public virtual PersonType PersonTypes { get; set; }

}

Maplarimiz ise aşağıdaki şekilde tasarlıyoruz.Dikkat edilirse Fluent Nhibernate Giriş 2 deki basit mapleme mantığından farklı olarak artık İlişkili alanları nesne mantığında tutuyoruz.

public PersonTypeMap()

{

Table(“PersonType”);

Schema(“dbo”);

Id(x => x.ID);

Map(x => x.Name);

HasMany<Person>(x => x.Persons).Cascade.AllDeleteOrphan().KeyColumn(“ID”).Inverse().Table(“PersonType”);

}

public class PersonMap:ClassMap<Person>

{

public PersonMap()

{

Table(“Person”);

Schema(“Common”);

Id(x => x.ID);

Map(x => x.Name);

References(x => x.PersonTypes).Column(“PersonTypeID”).Cascade.None();

}

}

Bundan sonra Parent – Child olarak tek bir seferde save yapabilmek için aşağıdaki gibi bir kod yazmak yeterli olacaktır.Aşağıdaki koddada görüldüğü üzere Sistem Admin Tipini yaratırken ona bağlı olarak Person varlığınıda yaratıyoruz.Bu işlemleride runtimede tek bir savede yaptığımız için mappinglerimizide nesne tabanlı çalışcak hale getiriyoruz.

var session = NHibernateHelper.OpenSession();

PersonType p = new PersonType();

p.Name = “Sistem Admin”;

p.Persons  = new Collection<Person>();

Person p2 = new Person { Name = “Bilgehan Yıldız”,PersonTypes=p};

p.Persons.Add(p2);

session.Save(p);

.NET kategorisine gönderildi | Yorum bırakın

SQL SERVER 2008 REPORTING SERVICE HTML FORMATINDA BİLGİ GÖSTERME

SSRS 2008 deki özelliklerden biride eğer verilerimiz veritabanından html formatında geliyor ise bunu yorumyalabilmesidir.Aşağıdaki şekilde Düz başlığı altında yazan yerde görüldüğü gibi eğer verilerimizi direkt olarak basarsak bu şekilde gözükecektir

Ancak yukarıdaki şekilde html başlığındaki gibi verilerimizdeki html taglarının yorumlanmasını istiyorsak bu değişikliği yapmak istediğimiz hücreye çift tıklayıp sağ tuş dan create placeholder diyoruz.

Açılan popup da markuptype kısmında html interpret seçeneğini seçiyoruz.Daha sonra gene aynı popupta value değerini belirliyoruz.Böylece gelen verimizdeki html tagları yorumlanabiliyor

SQL SERVER kategorisine gönderildi | Yorum bırakın

ADO.NET-1

1-)Öncelikle bağlantı cümlesini tek merkezi bir yerde tutmalısınız,bu şart değildir ancak uygulama taşımalarında kolaylık sağlar. Bu window uygulamaları için app.config ,web uygulamaları için web.configdir.Bunlar temelde bir nevi xml dosyası olup genelde uygulamarda tek bir merkezden okunması gereken değerler buralara konur

Örnek app.config dosyası  burada connection stringimizi aşağıdaki gibi yazıyoruz.Daha sonra veri tabanımızın yolu vs değişirse sadece burdan değişiklik yapmamız yeterli oluyor.Bunuda projene eklemek için aşağıdaki adımları izlemelesiniz.

<?xml version=”1.0″ encoding=”utf-8″ ?>

<configuration>

<configSections>

</configSections>

<connectionStrings>

<add name=”TelefonRehberiConnectionString”

connectionString=”Data Source=.;Initial Catalog=TelefonRehberi;Integrated Security=True”

providerName=”System.Data.SqlClient” />

</connectionStrings>

</configuration>

Bunuda kodda kullanmak için aşağıdaki şekilde kod yazmamız lazım

Bunu yapmadan önce projemize referans–>Add–>System.Configuration dll eklememiz gerekmektedir

string baglantiyolu = ConfigurationManager.ConnectionStrings[“TelefonRehberiConnectionString”].ConnectionString;

2-)connection string örnekleri

Connection stringde

Data Source àmakina adı,ip vs olabilir,. Dersen makinandaki local sql servera bağlanır

Initial CatalogàBuraya database adını yazman gerekir

User IdàDatabaselere genelde güvenlik için kullanıcılar açılır.Databasede hakkı olan kullanıcı

PasswordàDatabase kullanıcısına ait şifre

Data Source=ServerAd;Initial Catalog=DbAd;User Id=KullanıcıAd;Password= 1234;

Bu şekilde bir bağlantı yapılırsa Integrated Security =True diye bu o database windows authenticate yani şifre vermeden bağlanabileceğini gösterir

Data Source=.;Initial Catalog=TelefonRehberi;Integrated Security=True

Alternatif bağlantı cümleleri için aşağıdaki adresi inceleyebilirsiniz

http://www.connectionstrings.com/

3-)Veritabanına bağlanıp sonuçları bir küme içine almak için gereken kodlar

Sql serverla iş yapacaksan SqlConnection ,Access ile yapacaksan OleDbConnection gibi veritabanın değişirse kullancağın bu yapıları değiştirmelisin ancak mantıkları aynıdır.

string baglantiyolu = ConfigurationManager.ConnectionStrings[“TelefonRehberiConnectionString”].ConnectionString;

//Sql Connection bunun ile içine veritabanı yolunu vererek nereye bağlancağımızı belirtiyoruz

SqlConnection conn = new SqlConnection(baglantiyolu);

//Veritabanımızdan döncek kayıtları bir yere almam lazım ,datatable de verileri alabileceğim bir küme olarak düşün

DataTable dt = new DataTable();

//Select sorgusu atarak veritabanından istediğim alanları çekebilirim

string sorgu = “Select KisiID,Ad,Soyad from Kisi”;

//Sqldataadapter ise kendisine verilen sorgu ve veritabanını kullanarak işlemleri gerçekliyeceğimiz sınıftır

SqlDataAdapter adap = new SqlDataAdapter(sorgu, conn);

//Fill metodu ile Datatable gibi dolmasını istediğimiz veri kümesinin içine datalarımızı atıyoruz

adap.Fill(dt);

//En sonda bu veri kümemizi grid gibi bir elemanın kaynağına atayarak gösterilmesi vs.. gibi işlemleri yapabiliriyoruz

dataGridView1.DataSource = dt;

4-)SqlCommand ise SqlAdapter gibidir ancak daha çok stored procedure,insert,update,delete gibi işlemlerde tercih edilir.Ancak Command ile işlem yapılırken database bağlantıyı senin açıp kapaman gerekir.

conn.Open();àVeritabanı bağlantısını açar

cmd.ExecuteNonQuery();àCommand nesnesini çalıştırmak için kullanılır

conn.Close();Veritabanı bağlantısını kapar

sqlparameter ise sorgularının parametre almasını istersen resimdeki değerleri formdan okuyup database kaydetmek istiyorsan önce

sorgunda @ ile belirttiğin kelimeler parametredir

Daha sonra bu parametreler değer ataman gerekir

Örnek parametre listesinin 0 ıncı elemanı @Ad parametresine denk geliyor değeri formdaki name alanı

paramlist[0]=new SqlParameter(“@Ad”, txtName.Text);

Bütün bunları yaptıktan sonra query çalıştırmadan önce bunların hepsini aşağıdaki gibi commandına eklemen lazım

cmd.Parameters.AddRange(paramlist);

Bütün bunları yaptıktan sonra command nesneni aşağıdaki gibi çalıştırdığında işlemi yapıyor

cmd.ExecuteNonQuery();

bool Cinsiyet;

if(rdbBay.Checked)

Cinsiyet=true;

else

Cinsiyet=false;

string baglantiyolu = ConfigurationManager.ConnectionStrings[“TelefonRehberiConnectionString”].ConnectionString;

SqlConnection conn = new SqlConnection(baglantiyolu);

string sorgukisiekle = “Insert Into Kisi(Ad,Soyad,Cinsiyet,Yas,TcKimlik) values(@Ad,@Soyad,@Cinsiyet,@Yas,@TcKimlik)”;

SqlParameter[] paramlist = new SqlParameter[5];

paramlist[0]=new SqlParameter(“@Ad”, txtName.Text);

paramlist[1] = new SqlParameter(“@Soyad”, txtSoyad.Text);

paramlist[2] = new SqlParameter(“@Cinsiyet”, Cinsiyet);

paramlist[3] = new SqlParameter(“@Yas”, nudYas.Value);

paramlist[4] = new SqlParameter(“@TcKimlik”, txtTcKimlik.Text);

SqlCommand cmd = new SqlCommand(sorgukisiekle, conn);

cmd.Parameters.AddRange(paramlist);

conn.Open();

cmd.ExecuteNonQuery();

conn.Close();

5-)SqlParametrelerini kullanmanın farklı yöntemleri var örnek olarak yukarıda benim yaptığım bir parametre listesi oluşturmaktı ancak parametreleri şu şekilde de ekleyebilirdim

Aşağıdaki gibi parametreleri tek tek ekleyebilirsiniz mesela farklı algoritmalarda işine yarar

SqlParameter param=new SqlParameter(“@Ad”, txtName.Text);

cmd.Parameters.Add(param);

6-)Aşağıdaki şekilde hiç parametre kullanmadan da işlem yapılabilir ancak bunu kesinlikle yapma ,sql injection hatalarına vs neden olabilir.ve kod okunabilirliğini azalır.

string sorgukisiekle = “Insert Into Kisi(Ad,Soyad,Cinsiyet,Yas,TcKimlik) values(@Ad=”+txtName.Text+”,@Soyad=”+txtSoyad.Text…

.NET kategorisine gönderildi | Yorum bırakın