C# SQL Veri Silmede Sorun

Bu konuyu okuyanlar

thegabrela

Öğrenci
Katılım
20 Şubat 2013
Mesajlar
3
Reaksiyon puanı
0
Puanları
1
Merhabalar

1 - bir datasetim var ve birde adaptörüm var ve textBox daki Verileri bu Sayede İlk Önce Datasete ekliyorum Sonra Update komutu ile veritabanınıda güncelliyorum
aynı şekildede listboxdan seçmiş olduğum veriyi siliyorum fakat şöyle bir sorun çıktı ben yeni bir veri eklediğim zaman programı kapatıp açtıktan sonra
eklediğim veriyi silebiliyorum fakat program açıkken bir veri eklediğim zaman programı kapatıp açmadan silmek istediğim anda bana şu Uyarıyı Veriyor.Acaba veri eklerken mi bir yanlış yapıyorumda silmekte sıkıntı çıkıyor yoksa veri silme kodlarımdamı yanlışlık var Bir Türlü Çözemedim

Hata Mesajı :
k6tts.jpg


2-bir De şu Sorunum var verilere primary key olarak id var otomatik veriyor ; mesela 20 tane veri ekledim diyelimki hepsini sildim başka eklemek istediğimde id 21 den başlıyor yani id ler silinmiyor sürekli yükseliyor id yi otomatik verdirmeyip ben veri ekler gibi toplam sayıya +1 vererek eklesem bu seferde mesela 20 tane veri var aradaki mesela 15. sildiğim zaman bu 15 den sonrakiler hepsi bir yukarı kayarak son id 19 olmasını istiyorum bunu yapamadım bir türlü

nasıl çözebilirim yardımcı olabilirmisiniz?




Kodlar ;





using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlServerCe;

namespace local_database
{
public partial class adapter_deneme : Form
{
public adapter_deneme()
{
InitializeComponent();
}

SqlCeConnection baglanti = new SqlCeConnection("Data Source = vt.sdf");

private void adapter_deneme_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'vtDataSet.OyunKategori' table. You can move, or remove it, as needed.
this.oyunKategoriTableAdapter.Fill(this.vtDataSet.OyunKategori);
// TODO: This line of code loads data into the 'vtDataSet.Oyun' table. You can move, or remove it, as needed.
this.oyunTableAdapter.Fill(this.vtDataSet.Oyun);

//---Kategori tablosundaki Verileri ListBox 1 de Gösterme-----
listBox1.DataSource = vtDataSet.Tables["oyunKategori"];
listBox1.DisplayMember = "kategori";
listBox1.ValueMember = "id";
//-------------------------------------------------------------
listBox1.SelectedItem = null;

}

private void ButonKaydet_Click(object sender, EventArgs e)
{
if (textBox1.TextLength != 0)
{

baglanti.Open();

DataRow dr = vtDataSet.OyunKategori.NewRow();
dr["kategori"] = textBox1.Text;
vtDataSet.OyunKategori.Rows.Add(dr);
oyunKategoriTableAdapter.Update(vtDataSet.OyunKategori);
textBox1.Clear();
listBox1.SelectedItem = null;
baglanti.Close();
}
else
MessageBox.Show("!Lütfen Kategori İsmi Belirtiniz");
}

private void ButonSil_Click(object sender, EventArgs e)
{
if (listBox1.SelectedValue != null)
{
if (MessageBox.Show("Seçilen Kategori Silenecektir. Eminmisiniz?", "Uyarı", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
if (listBox1.SelectedIndex > -1)
{
baglanti.Open();
vtDataSet.OyunKategori.Rows.Find(listBox1.SelectedValue).Delete();
oyunKategoriTableAdapter.Update(vtDataSet.OyunKategori);
listBox1.SelectedItem = null;
baglanti.Close();
}

}

}
else
MessageBox.Show("Silincecek Kategoriyi Seçiniz");
}
}
}

ilgilenenlere şimdiden teşekkürler
 

annttiigs

Müdavim
Emektar
Katılım
7 Şubat 2007
Mesajlar
2,589
Reaksiyon puanı
24
Puanları
38
DB Refresh ederek kaydın db'de olup olmadığını kontrol et. DB de olmayan bir kaydı silmeye ya da update etmeye çalışıyorsun. Bir kaç tane debug amaçlı log koyarsan kolayca göreceksin gibi. Silmeden önce kayıt var mı diye bak bakalım.
 

thegabrela

Öğrenci
Katılım
20 Şubat 2013
Mesajlar
3
Reaksiyon puanı
0
Puanları
1
db refresh Yapmayı bilmiyorum ama şöyle birşey yaptım kodlarda kayıtı ekletip update yaptıktan sonra(ekleme komutundan bahs ediyorum silme değil) listbox da veritabanındaki satırları gösterttim orada eklenmiş olarak gösteriyo hatta şu kod ile yaptım

Kodlar;

SqlCeCommand cmd = new SqlCeCommand("Select * from OyunKategori", baglanti);
SqlCeDataReader kayitlar = cmd.ExecuteReader();
while (kayitlar.Read())
listBox3.Items.Add(kayitlar["id"].ToString() + " - " + kayitlar["kategori"].ToString());




bu arada bir de şöyle bir şey var eğer datasete bağlantılı bir datagridwiev koyarsam forma , ben veri eklerken verinin id sini -1 olarak gösteriyo


bir hata kodunda şunlarıda gösteriyor


kbttd.jpg
 

annttiigs

Müdavim
Emektar
Katılım
7 Şubat 2007
Mesajlar
2,589
Reaksiyon puanı
24
Puanları
38
Uygulaman muhtemelen kapatırken auto commit ediyor olabilir. Silme işleminden önce commit eder misin db'yi ? uygulaman data set ya da her neyse onun cache'sini sana gösteriyor olabilir.

2. sorunu görememişim. ID'yi otomatk güncellemesine eğer unique id üreten bir metodun yoksa hiç karışma. Bırak öyle devam etsin :)

silme silmeme durumunu ise. Silmek istediğin verinin id'sii print ettirip DB'den manuel olarak kontrol eder misin ?
 

thegabrela

Öğrenci
Katılım
20 Şubat 2013
Mesajlar
3
Reaksiyon puanı
0
Puanları
1
şöyle yaptım sanırım sorun çözüldü benim datasetteki adaperime gelip id kolonunun özelliklerine gelerek autoincrementseed ve autoincrementstep özellikleri -1 görünüüyordu ben onları normal 0 , 1 olarak değiştirdim ve sorun yok şu anda silmede sıkıntı çıkartmıyor sanırsam dediğim o gridwievde -1 gösteriyo olayıda bundan kaynaklanıyordu çünkü bu ayarı yaptıktan sonra id ler otomatik olarak son id den bir fazla olarak yükseliyor :):) sanırsam sorun çözüldü
 
Üst