veri tabanı işleminde nokta virgül hatası [Güncel]

C# (C Sharp) veya Java ile ilgili konuları buraya yazabilirsiniz.
Cevapla
mkysoft
Kıdemli Üye
Mesajlar: 2995
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

veri tabanı işleminde nokta virgül hatası [Güncel]

Mesaj gönderen mkysoft » 13 Kas 2009 10:34

Veri tabanı işlemleri içiren basit bir program yazdım. Virgüllü sayıları grid üzerinden girdiğimde kayıt düğmesine basıyorum, kural ihlali diye hata veriyor, durduruyor programın çalışmasını. Hata mesajının tamamı altta.
----------------
An unhandled exception of type 'System.Data.DBConcurrencyException' occurred in System.Data.dll
Additional information: Tutarlılık ihlali: UpdateCommand, beklenen 1 kaydın 0 kaydını etkiledi.
---------------------

Veri tabanını açıp elimle virgüllü sayı giriyorum, ekranda sorunsuz gösteriyor, programdan değiştirp kaydetmeye çalışınca yine hata veriyor. Manuel oledataadapter, oledatacommand tanımlarım. parametreleri tanımladım, parameters value olarak girdim verileri. veri tabanına sql i göndermeden kontrol ettiğimde WHERE abc= 1.2 yazması gerekirken WHERE abc=1,2 yazdığını görüyorum. Bundan dolayı hata veriyor galiba. Bu sorunu nasıl çözebilirim?
Teşekküler
En son mkysoft tarafından 19 Kas 2009 08:29 tarihinde düzenlendi, toplamda 1 kere düzenlendi.

Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3043
Kayıt: 17 Nis 2006 07:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: veri tabanı işleminde nokta virgül hatası

Mesaj gönderen sabanakman » 13 Kas 2009 01:16

Bildiğim kadarıyla SQL dilinde ondalıklı sayılar sadece nokta ile ifade edilebiliyor. İşin içine virgül karışınca çoklu değer olarak ele alınmaktadır.

Kod: Tümünü seç

select * from tablo where id in (1,2)
gibi. Virgülü noktaya çevirip kullanmak reel sayı kullanımına çözüm olacaktır.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .

mkysoft
Kıdemli Üye
Mesajlar: 2995
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: veri tabanı işleminde nokta virgül hatası

Mesaj gönderen mkysoft » 13 Kas 2009 09:37

teşekkürler @sabanakman, bunu bende biliyorum ancak bu dönüşümü tıpkı delphideki gibi C#'ın datatable nesnesi yapmalı, ben neden uğraşayımki? Ben sonuçta SQL 'i text olarak göndermiyorum, parameters ile parametreleri belirtiyorum, gerisi dil'e kalmalı. Bir kaç yere daha sordum, bir kaç telefon görüşmesi yaptım. Telefondakilerden biri, çevirimi kendimin yapmam gerektiğini söyledi. Bununla ben uğraşacaksam C#'ın ne anlamı kalırkı :(

Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4319
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: veri tabanı işleminde nokta virgül hatası

Mesaj gönderen aslangeri » 14 Kas 2009 09:06

s.a.
parametreye değer atamasını nazıl yapıyorsunuz peki?
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim

mkysoft
Kıdemli Üye
Mesajlar: 2995
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: veri tabanı işleminde nokta virgül hatası

Mesaj gönderen mkysoft » 14 Kas 2009 12:32

Kod: Tümünü seç

sql.CommandText = "SELECT * FROM TblCaplar WHERE Cap = @Cap AND EtKalinlik = @EtKalinlik";
sql.Parameters.Add("@Cap", OleDbType.Decimal);
sql.Parameters["@Cap"].Value = Convert.ToDouble(Cap);
sql.Parameters.Add("@EtKalinlik", OleDbType.Decimal);
sql.Parameters["@EtKalinlik"].Value = Convert.ToDouble(EtKalinlik);
OleDbDataAdapter Sda = new OleDbDataAdapter();
Sda.SelectCommand = sql;
Sda = sql.ExecuteReader();
Aynı sorun direk datagride bağladım ve grid üzerinden veri girdiğim standart bir tablo içinde hataya neden oluyor. Aklıma kullandığım sürüceden kaynaklanabileceği geldi.

Kod: Tümünü seç

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Tanimlar.mdb
jet oledb kullanıyorum.
teşekkürler.

Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4319
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: veri tabanı işleminde nokta virgül hatası

Mesaj gönderen aslangeri » 14 Kas 2009 02:01

sql.Parameters["@EtKalinlik"].Value = Convert.ToDouble(EtKalinlik);
"EtKalinlik" ın tipi nedir nerde tanımlamıştır?
eğer string ise convert ederken IFormatprovider tanımlarsan "." - "," işini halledebilirsin gibime geliyor.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim

mkysoft
Kıdemli Üye
Mesajlar: 2995
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: veri tabanı işleminde nokta virgül hatası

Mesaj gönderen mkysoft » 14 Kas 2009 09:39

Object tipinde tanımlamışım:

Kod: Tümünü seç

object EtKalinlik = GrdSiparisler.Rows[i].Cells["EtKalinlik"].Value;
Bu değeri stringe çevirip tabiki virgülden den noktaya dönüşüm yapabilirim, datagridleri ne yapacağım?
Telefona bilgi aldığım kişi, dataadapterların post işlermine müdehale edip düzeltmeleri genel hale getirebileceğimi söyledi. Bu hata ile ilk karşılaşan ben miyim, anlamadım.

Cevapla