Bu makalemde sizlere daha önce Validation-1 ve Validation-2‘de hazırlamış olduğum proje üzerinden veritabanına veri eklemenin nasıl yapıldığını göstereceğim.
1-) İlk olarak projemizin üzerinde sağ tıklayıp Add –> Add ASP.NET Folder –> App_Data yolunu izleyerek App_Data klasörümüzü projemize ekliyoruz.
2-) App_Data klasörünü projemize ekledikten sonra App_Data klasörü üzerinde sağ tıklayıp Add –> New Item diyoruz.
3-) Karşımıza çıkan ekranda Visual C# üzerine tıkladıktan sonra SQL Server Database bileşenini seçip alt tarafta veritabanımızın adını yazıyoruz.
Veritabanımızı ekledikten sonra aşağıdaki gibi bir görüntü almanız gerekiyor.
4-) Veritabanım.mdf üzerinde sağ tıklayıp Open diyoruz ve ekranımızın sol tarafında Server Explorer kısmında Veritabanımızı görüyoruz.
5-) Tables –> Add New Table yolunu izleyerek yeni bir tablo oluşturuyoruz. Aşağıdaki gibi değişkenlerimizin ismini ve tiplerini giriyoruz. “ID” adlı değişkenimiz primary key olup sistem tarafından otomatik olarak artmasını istiyorum. Bu sebeple Identity Specification altında bulunan Is Identity değerini Yes yapıyorum ve altındaki ifadelerin karşılığının 1 olduğunu görüyorum. Bunun anlamı id numarası vermeye 1′den başla ve birer birer artır demektir.
6-) Oluşturduğumuz tablomuzu kaydediyoruz.
7-) Projemiz üzerinde sağ tıklayıp Add –> New Item –> WCF Service‘i seçiyoruz. Bu sayede projemizde KullanıcıBilgileri adlı veritabanı tablomuza veri ekleyebileceğiz.
8 -) Ardından yine aynı yolu izleyerek projemize bir LINQ to SQL Classes ekliyoruz. Server Explorer‘dan işlemlerde kullanacağımız “KullaniciBilgileri” adlı tablomuzu sürükleyip bırakıyoruz ve kaydediyoruz. Ardından projemizi derliyoruz.
9-) Tablomuzu ekledikten sonra KullaniciEkle.svc.cs dosyamıza geçip aşağıdaki gibi içeriğini dolduruyoruz.
[C#]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; using System.ServiceModel.Activation;//bunu ekle namespace Ders_1.Web { [ServiceContract(Namespace = "")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] //satırında hata almamak için servicemodel.activation namespacesini ekliyoruz. public class KullaniciEkle { DataClasses1DataContext data = new DataClasses1DataContext(); [OperationContract] //satırını eklemeyi unutmayın... public bool Ekle(string isim,string soyisim, DateTime dogumtarihi,string dogumyeri,string okul,string bolum,string telefon) { try { KullaniciBilgileri kullanici = new KullaniciBilgileri(); kullanici.Isım = isim; kullanici.Soyisim = soyisim; kullanici.Dogumtarihi = dogumtarihi; kullanici.Dogumyeri = dogumyeri; kullanici.Okul = okul; kullanici.Bolum = bolum; kullanici.Telefon = telefon; data.KullaniciBilgileris.InsertOnSubmit(kullanici); //girmiş olduğumuz bilgilerin tabloya eklenmesi için yazmamız gerekiyor. data.SubmitChanges(); // değişiklerin algılanması için yazmamız gerekiyor. return true; //işlem tamamlandığında true değerini gönderiyoruz. } catch { return false; //işlemde hata oluşursa false dönderiyor. } } } } |
10-) Ardından Service References –> Add Service Reference yolunu izleyip oluşturduğumuz “KullaniciEkle.svc” servisimizi ekliyoruz.
11-) WCF Service’mizi ekledikten sonra projemizi build ediyoruz. MainPage.xaml.cs dosyamıza geçip aşağıdaki gibi sırasıyla kodlarımızı yazıyoruz.
[C#]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.Collections.ObjectModel;// ekledik namespace Ders_1 { public partial class MainPage : UserControl { KuEkle.KullaniciEkleClient servis = new KuEkle.KullaniciEkleClient(); public MainPage() { InitializeComponent(); Kullanici kullanici = new Kullanici(); LayoutRoot.DataContext = kullanici; } private void LayoutRoot_BindingValidationError(object sender, ValidationErrorEventArgs e) { if (e.Action == ValidationErrorEventAction.Added) { (e.OriginalSource as Control).Background = new SolidColorBrush(Colors.Yellow);//hatalı ise textbox'ın arkaplan rengini sarı yapıyoruz. ToolTipService.SetToolTip((e.OriginalSource as TextBox), e.Error.Exception.Message); } if (e.Action == ValidationErrorEventAction.Removed) { (e.OriginalSource as Control).Background = new SolidColorBrush(Colors.White);//hatalı değilse textbox'ın arkaplan rengini beyaz yapıyoruz. ToolTipService.SetToolTip((e.OriginalSource as TextBox), null); } } private void btn_kaydet_Click(object sender, RoutedEventArgs e) { if (vs.HasDisplayedErrors == true) MessageBox.Show("Belirtilen hataları düzeltip tekrar deneyin."); else { servis.EkleAsync(txt_isim.Text, txt_soyisim.Text, (DateTime)dogumtarihi.SelectedDate, txt_dogumyeri.Text, txt_okul.Text, txt_bolum.Text, txt_telefon.Text); servis.EkleCompleted+=new EventHandler<KuEkle.EkleCompletedEventArgs>(servis_EkleCompleted); } } void servis_EkleCompleted(object sender, KuEkle.EkleCompletedEventArgs e) { if (e.Result == true) { MessageBox.Show("Kullanici Başarılı Bir Şekilde Eklendi."); servis2.GetirAsync(); servis2.GetirCompleted += new EventHandler<KuGetir.GetirCompletedEventArgs>(servis2_GetirCompleted); } else MessageBox.Show("Kullanıcı Eklenemedi!"); } } } |
12-) Projemizi derleyip çalıştırıyoruz.
Hata olduğu için mevcut hatalarımızı düzeltip tekrar denememizi istiyor.
Hataları düzeltip tekrar denediğimizde kullanıcı eklenmiştir diye mesaj veriyor.Bakalım gerçekten veritabanımıza kullanıcımız eklenmiş mi? Bunun için Server Explorer‘dan ilgili tablomuzun üzerinde sağ tıklayıp Show Table Data diyoruz ve aşağıdaki görüntü ile karşılaşıyoruz. Sonuç olarak girmiş olduğumuz bilgiler veritabanımıza başarılı bir şekilde eklenmiş oluyor.
Bu makalemde Validation kontrolünün kullanımını örnekleyip, Silverlight tarafındaki MSSQL Server’a nasıl kayıt ekleyebileceğimizden bahsettim. Umarım yararlı olmuştur. Daha sonraki makalelerimde verilerin güncellenmesi, verilerin silinmesi gibi işlemlerden bahsedeceğim. Bir sonraki makalemde görüşmek üzere…
Xaml kısmında service referans kalsörüne service1.svc eklerken “an error occurred while attempting to find services at” gibi bi hata veriyor. bitürlü çözemedim
Service References –> Add Service Reference yolunu izlemeden önce projenizi build edin ve build sonucunda hata varsa bu hatayı giderdikten sonra referanslar bölümüne servisinizi ekleyin.
anlatım için teşekkürler. 10. adımda hata veriyor
‘http://localhost:49406/Service1.svc’ yüklenirken hata oluştu.
İstek şu hata iletisini verdi:
—
SilverlightApplication1.Web.Service1 türü hizmet sınıfı, hem bir ServiceContract tanımlar hem de SilverlightApplication1.Web.IService1 türünden bir ServiceContract alır. Sözleşme devralma yalnızca arabirim türleri arasında kullanılabilir. Bir sınıf ServiceContractAttribute ile işaretlenmişse, hiyerarşide ServiceContractAttribute özelliğine sahip tek tür olmalıdır. SilverlightApplication1.Web.IService1 türünde bulunan ServiceContractAttribute özelliğini, SilverlightApplication1.Web.IService1 türünün uyguladığı ayrı bir arabirime taşımayı düşünebilirsiniz.
body {font-family:”Verdana”;font-weight:normal;font-size: .7em;color:black;}
p {font-family:”Verdana”;font-weight:normal;color:black;margin-top: -5px}
b {font-family:”Verdana”;font-weight:bold;color:black;margin-top: -5px}
H1 { font-family:”Verdana”;font-weight:normal;font-size:18pt;color:red }
H2 { font-family:”Verdana”;font-weight:normal;font-size:14pt;color:maroon }
pre {font-family:”Consolas”,”Lucida Console”,Monospace;font-size:11pt;margin:0;padding:0.5em;line-height:14pt}
.marker {font-weight: bold; color: black;text-decoration: none;}
.version {color: gray;}
.error {margin-bottom: 10px;}
.expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
@media screen and (max-width: 639px) {
pre { width: 440px; overflow: auto; white-space: pre-wrap; word-wrap: break-word; }
}
@media screen and (max-width: 479px) {
pre { width: 280px; }
}
‘/’ Uygulamasında Sunucu Hatası.
SilverlightApplication1.Web.Service1 türü hizmet sınıfı, hem bir ServiceContract tanımlar hem de SilverlightApplication1.Web.IService1 türünden bir ServiceContract alır. Sözleşme devralma yalnızca arabirim türleri arasında kullanılabilir. Bir sınıf ServiceContractAttribute ile işaretlenmişse, hiyerarşide ServiceContractAttribute özelliğine sahip tek tür olmalıdır. SilverlightApplication1.Web.IService1 türünde bulunan ServiceContractAttribute özelliğini, SilverlightApplication1.Web.IService1 türünün uyguladığı ayrı bir arabirime taşımayı düşünebilirsiniz.
Açıklama: Geçerli web isteği yürütülürken işlenmemiş özel durum oluştu. Lütfen hata ve kod içinde kaynaklandığı yer hakkında daha fazla bilgi almak için yığın izlemesini gözden geçirin.
Özel Durum Ayrıntıları: System.InvalidOperationException: SilverlightApplication1.Web.Service1 türü hizmet sınıfı, hem bir ServiceContract tanımlar hem de SilverlightApplication1.Web.IService1 türünden bir ServiceContract alır. Sözleşme devralma yalnızca arabirim türleri arasında kullanılabilir. Bir sınıf ServiceContractAttribute ile işaretlenmişse, hiyerarşide ServiceContractAttribute özelliğine sahip tek tür olmalıdır. SilverlightApplication1.Web.IService1 türünde bulunan ServiceContractAttribute özelliğini, SilverlightApplication1.Web.IService1 türünün uyguladığı ayrı bir arabirime taşımayı düşünebilirsiniz.
Kaynak Hatası:
Geçerli web isteği yürütülürken işlenmeyen bir özel durum üretildi. Özel durumun kaynağı ve konumuna ilişkin bilgiler aşağıdaki özel durum yığını izlemesi kullanılarak belirlenebilir.
Yığın İzleme:
Sürüm Bilgisi: Microsoft .NET Framework Sürümü:4.0.30319; ASP.NET Sürümü:4.0.30319.18033
–.
Meta veri çözümlemeyen bir başvuru içeriyor: ‘http://localhost:49406/Service1.svc’.
Sunucu anlamlı bir yanıt sağlamadı; bunun nedeni, bir sözleşme uyumsuzluğu, zamanından önce kapatılan bir oturum veya bir iç sunucu hatası olabilir.
If the service is defined in the current solution, try building the solution and adding the service reference again.
Merhaba,
7. adımda service ekledikten sonra projenizi build edip bir hata olmadığını kontrol edin. Ardından diğer işlemleri yapın ve 9. adım sonunda tekrar build edin. Özellikle 10. adıma geçmeden önce projenizi build etmeniz ve projenizde hata olmaması gerekiyor. Aksi halde eklemiş olduğunuz servisi/servisleri referanslara eklerken sorun yaşarsınız.
İkinci olarak localhosttaki url ile servisinizin url’lerinin aynı olduğunu kontrol edin.