MSSQL “Saving Changes Not Permitted” Hatası

Merhaba,
Bu hatayla eminim ki bir çok kişi karşılaşmıştır. Türkeç kaynak eksikliğimizden dolayı aslına bakarsanız bende bu hatanın çözümünü internette kolay bulamadım. İşyerimizde Oracle uzmanı olan ve aynı zamanda MSsql bilginisinde çok yüksek olduğuna inandığım bir sql admini (Brkkrp) bana çözümü iletti. Bildiğiniz gibi bu hata tabloda bir değişiklik yapmak istediğimizde alınmaktadır. Ben ise bu hatayı id colonun identity yapmak istediğimde aldım.
Hata ve çözümünde izlenen yolu ekran görüntülerinde paylaşıyorum.
MSSQL i açıyoruz.
Tools> Options > Designerts -Table and Designers  bölümünden  “Prevent saving changes that require  table  re-creation” checkbox ını kaldırıyoruz.

MS Sql Save (Not Permitted) Dialog Box

MS Sql de Table veya DB üzerinde bir değişiklik yaptıktan sonra Ctrl +S sonucunda aşağıdaki hata sıkça alınabiliyor.
Bunun çözümü Tools menüsünden Options dan basitçe giderilebilmektedir.

Form içinde Textbox Temizleme

Merhaba,
Bunun en kolay yolu Groupbox kullanmaktır, Groupbox kullanarak groupboxların içerine attığımız tüm WF objectlerini temizleyebilir, değer verebilir vb. işlemler yapabiliriz.
Konumuz  Textbox  temizlemek olduğuna göre aşağıdaki metot işimize yarayacaktır.


public void Temizle(GroupBox group)
{
foreach (var item in group.Controls)
{
if (item is TextBox)
{
TextBox txt = item as TextBox;
txt.Clear();
}

}
}

Bu metotla aşağıdaki sonuca ulaşırız.
Groupbox içerisinde yer alan textboxların temizlendiğini görmekteyiz.

OOP Okul Otomasyonu

Merhaba Arkadaşlar,

bugünkü konumuzda OOP ile WFA uygulamasın mini bir Sınıf otomasyonu gerçekleştireceğiz.
Özetle;

1.Listview lerimize Öğrenci ve Öğretmen ekleyeceğiz.
2.Yine farklı bir listview e Öğretmen seçerek sınıf oluşturacağız.

3.Öğrencileri seçerek Sınıfa ekleyeceğiz.
4. Seçili sınıftaki öğrencileri listbox da görüntüleyeceğiz.

Ekran görüntülerinde göstermek gerekirse projemiz tamamlandığında aşağıdaki gibi bir gösterim olacaktır.

Projemiz de  class library ile dll oluşturdum ve bu .dll wfa projesine referans gösterdim.
Classlarda abstract class ve abstract metot kullandım.

Aşağıdaki linkten code behind e ulaşabilirsiniz.

http://www.dosya.tc/server7/p0p9qi/Code.zip.html

 

ingilizce klavyede @ işareti nasıl yapılır?

Merhaba,

İşletim sistemi kurulumlarında veya Server  kurulumlarında klavye olarak İngilizce klavye seçilmiş olabilir.
Bu tip durumlarda bazen bir aktivasyon için e-mail adreine ihtiyaç vardır. Tabi doğal olarak da “@” işaretine bunun için Türkçe klavyede olduğu gibi AltGr+Q işimize yaramaz.

İngilizce klavyede “@” işareti aşağıdaki kombinasyon ile yapılır.
Shift + 2

Kod üzerinden WFA’a Tool oluşturma

Merhaba Arkadaşlar,

Yaptığımız tüm Windows Form uygulamalarında formumuza  ekleyeceğimiz elemanları Toolbox dan ekliyorduk.
Bugün ise kod yazarak nasıl element ekleyebildiğimizi küçük bir örnek ile anlatmaya çalışacağım.
Birden fazla eleman ekleyeceksek buadaki bütün yük döngümüze olacaktır. Aşağıdaki ekran görüntüsünde yorum satırlarında anlatmaya çalıştım.

StreamReader/StreamWriter Örnek Uygulama

Merhaba,
Bugünkü konumuzda anlatmak istediğim StreamReader/StreamWriter sınıfları ile örnek bir uygulama yapmaktır.
Kısaca açıklamak gerkirse;
*Content.txt girilen içeriğin Path.txt ye girilen yola Save butonu ile kaydedilmesi

*Dowland butonuna tıklanınca Pat

h.txt kaydedilen veriyi String metotlardan split ile kullanarak listbox da okutulması.
Kısa bu uygulamada hem Streamwriter hemde StreamReader sınıfları kullanılacaktır.

StreamReader/StreamWriter

Merhaba,

StreamReader ve StreamWriter System.IO kütüphanesi kullanılır. StreamWriter sınıfı ile metin dosyalarına karakter türünde değer girişi yapılır. Örnek olarak, bilgisayar üzerindeki bir sürücüde bulunan bir .txt dosyasına program içinden erişip metinsel bir ifade eklemek için, StreamWriter sınıfı kullanılabilir. Ben bu örnekte bir windows forms application açarak textboxa girdiğim değeri kaydet butonuna basarak .txt dosyasını oluşturuğ içerisine veri gittiğini göreceğim.

Yapılması gereken ilk işlem, StreamWriter sınıfının bir örneğini almaktır:

using (StreamWriter writer=new StreamWriter (“kayıt.txt”))

StreamWriter nesnesinin birden fazla constructor’ı bulunur. Biz, örneğimizde string türünde değer alanPath parametresini kullandık. Bu parametre ile, yazılacak olan dosyanın yol bilgisinin verilmesi yeterlidir.

Nesne tanımlandıktan sonra, Write ve WriteLine metotları ile yazma işlemi gerçekleştirilir. Bu iki metot arasında basit bir fark vardır. Write ile aynı satıra yazılır. WriteLine‘da ise, yazının sonunda Enter işlemi gerçekleştirilir ve imleç bir alt satıra geçer. Buraya kadar olan işlemler ile dosyaya yazma işlemi gerçekleştirilir. Dosyaya yazmak için, ilgili dosya ile bir bağlantı kurulur. Yazma işleminden sonra bu bağlantının kapatılması gerekir. Kapatma işlemi için Closemetodu kullanılır.

StreamReader ise .txt dosyasında yer alan verileri okumaya yarar.
.txt içerisindeki veriler bir string değere atanır ve ortadan textboxa gönderilir.

N-Tier Architecture (Katmanlı Mimari) nedir ? Nasıl yapılır?

Merhaba,

Katmanlı mimari yapısını aslında aşağıdaki resimle özelteyebiliriz.

Projelerimizde olmazsa olmazımız database bağlantılarıdır, databaseden veri çekme, ekleme, silme, güncelleme gibi işlemler yapmak istediğimizde bütün yükü UI(user interface) yüklemek çok doğru olmayacaktır.
Bu aşamada katmanlı mimari devreye girecek databaseden verileri çeken  DLL (Data Access Layer) katmanı işlemlerin yapılacağı BLL (Busines Logic Layer) katmanı ve sunum yapılan katman UI (User Interface) katmanı yer alacak bu yapı isteğe göre çoğaltılabilir ve yük paylaşımı yapılır.
Katmanlar birbirleriyle reference gösterilerek haberleşeceklerdir.
Bu bölüm biraz sıkıcı olabilir ama ufak bir örnekle MSSQL de yer alan Northwind veritabanını örnek olarak bir proje yapalım.

Her zamanki gibi Visual Studio muzu açıyoruz ve yine Blank Solution açarak wfa uygulamasını ve aynı zamanda projectlerden class library projelerini açarak DAL ve BLL isimli iki tane Class library oluşturuyoruz.

DAL katmanımıza yeni bir folder ve bu foldera new item diyerek   Ado.net Framework ile database mizi tanıtıyoruz.

Sonraki aşamlarda bir kaç makale önce tanıttığımız Ado.net Framework kurulumudur, onun için hızlı geçiyorum.
Aşağıda görüleceği gibi bütün verilerimiz(tablolarımız) geldi. Bu veriler database de tablo iken C#da sınıftır.

BLL katmanında ise metotlar, kontroller gibi iş yapacak komutlarımızı yazıyoruz.
Ve BLL katmanına DLL i referenca veriyoruz.

Aynı şekilde UI katmanınada (örnek projedeki adı NTier_01) BLL ve DAL katmanlarını reference veriyoruz.

Böylelikle UI katmanımızdan database ulaşabiliyoruz. Yani database doğrudan UI ve tutmadan farklı bir katman ulaştık, yada BLL katmanında database bilgilerini tutmadan DAL dan  ulaştık gibi düşünebilirsiniz.
Böylece iş yükünü dağıtmış olduk ve herkes kendi işini bilsin dedik

Umarım birşeyler anlatabilmişimdir.

Entity Framework > CodeFirst ile yeni database oluşturma

Merhaba Arkadaşlar,

MS Sql deki databaseler içerisinde yer alan her tablo visual studio(C#)da bir class demektir.
Peki codefirst ile ne yapacağız ?
Çok basit olarak bir WindowsFormsApplication penceresinin açılmasıyla sql üzerinde bir database ve tablolarının oluşmasını sağlayacağız.
Bunun için projemizde sınıflar(sel deki tablolar) oluşturacağız adım adım gittiğimizde ne demek istediğimiz ve ne yapmak istediğimi en sonunda göreceksiniz.

O zaman hiç vakit kaybetmeden visual studio ortamımızı açalım ve başlayalım.
İlk önce her zaman olduğu gibi boş bir “Blank Solution” açıyor ve ”New project” den uygulamamızı ve sınıflarımızı oluşturmaya başlıyoruz.
Burada ufak olarak base classımıza ortak bir özellik vererek diğer classların base classdan miras almalarınıda sağlayacağız.


Burada Category, Product, Entitybase, StokEntites diye 4 adet sınıf oluştrduk.
Category, Product, Entitybase(base class)  sınıflarımızda sqldeki tablolarımızın içeriğini(column name ve aşacakları tipleri) oluştururken  StokEntites de ise  DbContext sınıfından miras alarak database oluşturma işlemlerini yapacağız.

Bir diğer önemli alan ise  App.Config bölümüdür. Bu alanda asıl kayıt işlemlerini yapacağımız sql server bölümüne ait bilgiler vardır eğer bu alan doğru oluşturulmaz ise yaptığımız işlemler boşa gidecektir.

Burada bizim için önemli olan bölüm connectionStrings parametresinin içidir çünkü diğer alanlar zaten standarttır.

Windows Authentication bağlantısı yaptğımızda aşağıdaki gibi bir bağlantı yapmamız gerekmektedir.
connectionStrings>
<add name=”StokEntites_db” connectionString=”Server=pc\mehmet;integrated security=true;initial catalog=My_Db” providerName=”System.Data.SqlClient” />
</connectionStrings>

Eğer Sql de Windows Authentication değilde name ve password ile bağlantı yapmış olsaydık app.config deki connectionStrings parametresi aşağıdaki gibi olmalıydı.

<connectionStrings>
<add name=”StokEntites_db” connectionString=”initial catalog=My_Db; Server=pc\mehmet; username=sa; PWD=123″ providerName=”System.Data.SqlClient”/>
</connectionStrings>

Oluşturdğumuz classların içini aşağıdaki gibi dolduruyoruz.

StokEntites classımızda ise daha öncede söylediğimiz gibi  database create, table create işlemlerinin yanı sıra tableların içeriklerinide (nvarchar, desimal) belirliyoruz.

Burada önemli olan husus ise StokEntites sınıfımıza DbContext sınıfından miras alacağımız için using System.Data.Entity kütüphanesini eklememiz, bunun içinde Solution’a sağ tıklayıp Manage NuGet Packages’den Online bölümünden EntityFramework paketini indirmek.
Bu yükleme işleminden sonra kütüphane otomatik olarak gelecektir.

ve bu kadar işlemin ardından yapmamız gereken tek şey WFA loadına gelerek instance almak ve F5 tuşuna basarak projesi kaydettemek.
instance  aldıktan sonra sadece db oluştumu diye dataGridView ile ekrana başlıkların gelip gelmediğine bakacağım.

MS sql açarak görsel olarak görmek istersek;

İşte bu kadar yararlı olması dileğiyle.