En iyi yanıtlayıcılar
ORM öğrenmeye çalışıyorum. Update işlemini yapamadım.

Soru
-
Merhaba;
ORM ile veritabanı işlemleri yapmayı öğrenmeye çalışıyorum.
Bir solution içinde 4 proje var.
Form1 içinde veriler datagrid içinde görünüyor.
Ekleme ve güncelleme işlemi için yeni bir form açılıyor.
Ekleme işleminde bir sıkıntı yok. Gayet güzel çalışıyor.
Güncelleme işleminde aşağıdaki kodda direkt olarak else bloğuna giriyor ve Güncelleme işlemi başarısız kodu çalışıyor.
Kod şu şekilde.
public partial class FrmPopupSiparis : Form { siparislerORM orm = new siparislerORM(); private siparis siparis { get; set; } public FrmPopupSiparis(siparis _siparis) { InitializeComponent(); if (_siparis == null) { groupBox1.Text = "Yeni sipariş Ekle"; button1.Text = "EKLE"; } else { groupBox1.Text = "Sipariş Güncelleme"; button1.Text = "GÜNCELLE"; siparis = _siparis; txtSiparisKod.Text = siparis.SipKod; txtSipNo.Text = siparis.SipNo; } } private void button1_Click(object sender, EventArgs e) { if (siparis == null) { siparis = new siparis(); siparis.SipKod = txtSiparisKod.Text; siparis.SipNo = txtSipNo.Text; if (orm.Ekle(siparis)) ToolsMessage.Basarili("Kayıt", this); else ToolsMessage.Hata("Kayıt işlemi Başarısız", this); } else { siparis.SipKod = txtSiparisKod.Text; siparis.SipNo = txtSipNo.Text; siparis.ID = siparis.ID; int id = siparis.ID; if (orm.Guncelle(siparis)) ToolsMessage.Basarili("Kayıt", this); else ToolsMessage.Hata("Güncelleme işlemi Başarısız", this); } this.DialogResult = DialogResult.OK; } }
ORMBase kodu da aşağıdaki gibi .
public bool Guncelle(T entity) { StringBuilder sb = new StringBuilder(); sb.Append($"UPDATE {(TipGetir.GetCustomAttribute<Table>()).SqlTabloAdi} SET "); OleDbCommand cmd = new OleDbCommand(); int index = 0; string whereID = ""; foreach (PropertyInfo pi in TipGetir.GetProperties()) { cmd.Parameters.AddWithValue("@" + pi.Name, pi.GetValue(entity)); //cmd.Parameters.AddWithValue("@UrunAdi","Bilgisyar") if (pi.Name == TipGetir.GetCustomAttribute<Table>().IdentityCol) { whereID = " WHERE " + pi.Name + "=@" + pi.Name; } else if (TipGetir.GetProperties().Length - 1 == index) { sb.Append(pi.Name + "=@" + pi.Name); } else { sb.Append(pi.Name + "=@" + pi.Name + ","); } index++; } string query = sb.ToString() + whereID; cmd.CommandText = query; return ExecuteNonQuery(cmd); }
Nerede hata yapıyorum acaba. Yardımcı olabilirseniz sevinirim.
Yanıtlar
-
Bu koddan bir sey söylemek imkansız. TipGetir tipiyle calisiyorsunuz, parametrede gelen ise T, ilk görünen hata o.
Ikinci ve belkide en büyük hata: OleDb ile calismaniza ragmen, parametreleri TipGetir.GetProperties'den gelen sirayla ekliyorsunuz, sorgudaki sirayla degil. Bu güncellemenin yapılmamasına ya da hatalı yapılmasına neden olacaktır. (Bu arada AddWithValue kullanmayınız, Add kullanıp tipini belirtiniz).
Bu sekilde tekerleği yeniden bulmaya calismak yerine ornegin EF veya nHibernate kullanabilirsiniz. Kod acısından, onların kodlarını inceleyebilirsiniz.
Not: Basit ve efektif bir ORM ornegi IQToolkit. Onun kodu kisa ve anlasilir.
How to create a Minimal, Reproducible Example
The way to Go.
World's most advanced open source (object-) relational Database.
Flutter (for mobile, for web & desktop.
Not: Temelin geri zekalı arkadaşı Idris bu mesaja da atlayıp ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdiğimi, yardım etmeye calistigimi sorgulamaktır. Bu beyinsiz zavallıya, aptal olduğunu hatırlatmayı unutmayınız.
- Yanıt Olarak Öneren Mehmet Emin Kaymaz 19 Nisan 2020 Pazar 09:26
- Düzenleyen CetinBasozEditor 19 Nisan 2020 Pazar 21:33
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 21 Nisan 2020 Salı 23:25
- Yanıt İşaretini Geri Alan asasad1616 3 Mayıs 2020 Pazar 08:00
- Yanıt Olarak İşaretleyen asasad1616 3 Mayıs 2020 Pazar 12:27
-
Merhaba ;
Sorun kodda değilmiş.
Sorun Access ten kaynaklı. (Bu projeyi yazılımcı bir arkadaşıma uzaktan bağlanarak kontrol ettirdim. )
Aynı kodu SQLServerda çalıştırdığımda hiç problemsiz çalıştı.
Ama ne yazık ki bu çalışmayı Access i kullanarak yapmak zorundayım :(
Benim gibi mecbur değilseniz Access mi aman aman.....
- Yanıt Olarak İşaretleyen asasad1616 3 Mayıs 2020 Pazar 08:00
- Düzenleyen asasad1616 3 Mayıs 2020 Pazar 08:00 Eksik bilgi...
Tüm Yanıtlar
-
-
Bu koddan bir sey söylemek imkansız. TipGetir tipiyle calisiyorsunuz, parametrede gelen ise T, ilk görünen hata o.
Ikinci ve belkide en büyük hata: OleDb ile calismaniza ragmen, parametreleri TipGetir.GetProperties'den gelen sirayla ekliyorsunuz, sorgudaki sirayla degil. Bu güncellemenin yapılmamasına ya da hatalı yapılmasına neden olacaktır. (Bu arada AddWithValue kullanmayınız, Add kullanıp tipini belirtiniz).
Bu sekilde tekerleği yeniden bulmaya calismak yerine ornegin EF veya nHibernate kullanabilirsiniz. Kod acısından, onların kodlarını inceleyebilirsiniz.
Not: Basit ve efektif bir ORM ornegi IQToolkit. Onun kodu kisa ve anlasilir.
How to create a Minimal, Reproducible Example
The way to Go.
World's most advanced open source (object-) relational Database.
Flutter (for mobile, for web & desktop.
Not: Temelin geri zekalı arkadaşı Idris bu mesaja da atlayıp ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdiğimi, yardım etmeye calistigimi sorgulamaktır. Bu beyinsiz zavallıya, aptal olduğunu hatırlatmayı unutmayınız.
- Yanıt Olarak Öneren Mehmet Emin Kaymaz 19 Nisan 2020 Pazar 09:26
- Düzenleyen CetinBasozEditor 19 Nisan 2020 Pazar 21:33
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 21 Nisan 2020 Salı 23:25
- Yanıt İşaretini Geri Alan asasad1616 3 Mayıs 2020 Pazar 08:00
- Yanıt Olarak İşaretleyen asasad1616 3 Mayıs 2020 Pazar 12:27
-
siparis.ID = siparis.ID; int id = siparis.ID;
Siparis.ID değerini kendine eşitlemişsiniz. sanırım id değeri olmadığı için update yapamıyor kontrol edermisiniz
Yanıtları yardımcı olurlarsa yanıt olarak işaretlemeyi ve yardım sağlamazlarsa işaretlerini kaldırmayı unutmayın; bu, aynı veya benzer soruna çözüm arayan diğerlerine yardımcı olacaktır.
-
Merhaba ;
Sorun kodda değilmiş.
Sorun Access ten kaynaklı. (Bu projeyi yazılımcı bir arkadaşıma uzaktan bağlanarak kontrol ettirdim. )
Aynı kodu SQLServerda çalıştırdığımda hiç problemsiz çalıştı.
Ama ne yazık ki bu çalışmayı Access i kullanarak yapmak zorundayım :(
Benim gibi mecbur değilseniz Access mi aman aman.....
- Yanıt Olarak İşaretleyen asasad1616 3 Mayıs 2020 Pazar 08:00
- Düzenleyen asasad1616 3 Mayıs 2020 Pazar 08:00 Eksik bilgi...
-
Merhaba ;
Sorun kodda değilmiş.
Sorun Access ten kaynaklı. (Bu projeyi yazılımcı bir arkadaşıma uzaktan bağlanarak kontrol ettirdim. )
Aynı kodu SQLServerda çalıştırdığımda hiç problemsiz çalıştı.
Ama ne yazık ki bu çalışmayı Access i kullanarak yapmak zorundayım :(
Benim gibi mecbur değilseniz Access mi aman aman.....
@Çetin abinin gönderisini okudunuz umarım, karşınızda SQL tarzı bir şey varmış gibi parametreleri yanlış veriyorsunuz.
Access konusunda ise haklısınız bulaşan her yazılımcı en az bir kere sövmüştür.
- Düzenleyen Cihan YakarMVP 3 Mayıs 2020 Pazar 14:35
- Yanıt Olarak Öneren İdris Sak 3 Mayıs 2020 Pazar 19:27
-
Merhaba ;
Sorun kodda değilmiş.
Sorun Access ten kaynaklı. (Bu projeyi yazılımcı bir arkadaşıma uzaktan bağlanarak kontrol ettirdim. )
Aynı kodu SQLServerda çalıştırdığımda hiç problemsiz çalıştı.
Ama ne yazık ki bu çalışmayı Access i kullanarak yapmak zorundayım :(
Benim gibi mecbur değilseniz Access mi aman aman.....
@Çetin abinin gönderisini okudunu umarım, karşınızda SQL tarzı bir şey varmış gibi paramatreleri yanlış veriyorsunuz.
Access konusunda ise haklısınız bulaşan her yazılımcı en az bir kere sövmüştür.
Cihan ve Çetin Abi tşk ederim ikinize de parametre sırasını değiştirince oldu.
@Çetin abinin gönderisini okuduğunu umarım, karşınızda SQL tarzı bir şey varmış gibi paramatreleri yanlış veriyorsunuz.
Cümlesini bir şekilde anlamamış / yada atlamışım.
Her ikinize de tşkler.
- Düzenleyen asasad1616 3 Mayıs 2020 Pazar 12:27
-
Merhaba ;
Sorun kodda değilmiş.
Sorun Access ten kaynaklı. (Bu projeyi yazılımcı bir arkadaşıma uzaktan bağlanarak kontrol ettirdim. )
Aynı kodu SQLServerda çalıştırdığımda hiç problemsiz çalıştı.
Ama ne yazık ki bu çalışmayı Access i kullanarak yapmak zorundayım :(
Benim gibi mecbur değilseniz Access mi aman aman.....
Blog
How to create a Minimal, Reproducible Example
The way to Go.
World's most advanced open source (object-) relational Database.
Flutter (for mobile, for web & desktop.
Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.- Düzenleyen CetinBasozEditor 4 Mayıs 2020 Pazartesi 16:20