none
Table doesn't have a primary key hatası RRS feed

  • Soru

  • Merhabalar ben veritabanından bilgi sildiğimde yada Güncelleştirdiğimde bu hatayı veriyor 

    Buda kaynak kodlar bende anlamadın neden hata veriyor

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WindowsFormsApplication19
    {
        class SqlHelper:IDatabase
        {
            SqlConnection con;
            SqlCommand cmd;
            SqlDataAdapter da;
            SqlCommandBuilder cb;
            DataSet ds;
    
    
            public SqlHelper()
            {
                con = new SqlConnection("Server=.;Database=Kayit;Trusted_Connection=True;");
                cmd = new SqlCommand("SELECT Isim,Eposta,KullaniciAdi,KullaniciSifre FROM Kullanicilar",con);
                da = new SqlDataAdapter(cmd);
                cb = new SqlCommandBuilder(da);
                ds = new DataSet();
                da.Fill(ds,"Kullanicilar");
            }
    
            public int AddData(string isim, string eposta, string kullaniciAdi, string kullaniciSifre)
            {
                DataRow dr = ds.Tables["Kullanicilar"].NewRow();
                dr["Isim"] = isim;
                dr["Eposta"] = eposta;
                dr["KullaniciAdi"] = kullaniciAdi;
                dr["KullaniciSifre"] = kullaniciSifre;
                ds.Tables["Kullanicilar"].Rows.Add(dr);
                return  da.Update(ds, "Kullanicilar");
            }
    
            public int DeleteData(int kullanicilarID)
            {
                DataRow dr = ds.Tables["Kullanicilar"].Rows.Find(kullanicilarID);
                ds.Tables["Kullanicilar"].Rows.Remove(dr);
                return da.Update(ds, "Kullanicilar");
            }
    
            public int UpdataData(int kullanicilarID, string isim, string eposta, string kullaniciAdi, string kullaniciSifre)
            {
                DataRow dr = ds.Tables["Kullanicilar"].Rows.Find(kullanicilarID);
                dr["Isim"] = isim;
                dr["Eposta"] = eposta;
                dr["KullaniciAdi"] = kullaniciAdi;
                dr["KullaniciSifre"] = kullaniciSifre;
                return da.Update(ds, "Kullanicilar");
            }
        }
    }
    

    21 Mart 2013 Perşembe 16:35

Yanıtlar

  • using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WindowsFormsApplication19
    {
        class SqlHelper : IDatabase
        {
            SqlConnection con;
            SqlCommand cmd;
            SqlDataAdapter da;
            DataSet ds;
    
    
            public SqlHelper()
            {
                con = new SqlConnection("Server=.;Database=Kayit;Trusted_Connection=True;");
                cmd = new SqlCommand("SELECT KullaniciID,isim,Eposta,KullaniciAdi,KullaniciSifre FROM Kullanicilar", con);
                da = new SqlDataAdapter(cmd);
                SqlCommandBuilder cb = new SqlCommandBuilder(da);
                ds = new DataSet();
                da.Fill(ds, "Kullanicilar");
                da.FillSchema(ds,SchemaType.Source,"Kullanicilar"); //bunu kullanmamışsın
            }
    
            public int AddData(string isim, string eposta, string kullaniciAdi, string kullaniciSifre)
            {
                DataRow drAdd = ds.Tables["Kullanicilar"].NewRow();
                drAdd["Isim"] = isim;
                drAdd["Eposta"] = eposta;
                drAdd["KullaniciAdi"] = kullaniciAdi;
                drAdd["KullaniciSifre"] = kullaniciSifre;
                ds.Tables["Kullanicilar"].Rows.Add(drAdd);
                return da.Update(ds, "Kullanicilar");
            }
    
            public int DeleteData(int kullanicilarID)
            {
                DataTable dt =ds.Tables["Kullanicilar"];
                DataRow drDel = dt.Rows.Find(kullanicilarID);
                drDel.Delete();
                return da.Update(dt);
            }
    
            public int UpdataData(int kullanicilarID, string isim, string eposta, string kullaniciAdi, string kullaniciSifre)
            {
                DataTable dt = ds.Tables["Kullanicilar"];
                DataRow drUp = dt.Rows.Find(kullanicilarID);
                drUp["Isim"] = isim;
                drUp["Eposta"] = eposta;
                drUp["KullaniciAdi"] = kullaniciAdi;
                drUp["KullaniciSifre"] = kullaniciSifre;
                return da.Update(dt);
            }
           
        }
    }
    

    Tekrar bir hatırlatma, id yoksa veritabanında hata alırsın kesin.
    • Yanıt Olarak İşaretleyen Zerhan 22 Mart 2013 Cuma 07:27
    22 Mart 2013 Cuma 05:40
    Moderatör

Tüm Yanıtlar

  • Tablonun güncelleme ve silme yapabilmesi için birincil anahtara ihtiyacı var. Tablonuzda int tipinde otomatik artan birincil anahtar ekleyin ve öyle deneyin.
    21 Mart 2013 Perşembe 16:37
    Moderatör
  • Tablom budur zaten Primary Key ekli

    21 Mart 2013 Perşembe 16:40
  • O zaman select yaparken id'yi neden çekmiyorsun?
    21 Mart 2013 Perşembe 16:49
    Moderatör
  • Onu unutmuştum ama ID yi yazdım gene aynı hatayı veriyor bu arada ben bir interface tanımladım seçeneğe göre SQL SERVER yahut Access veri ekliyor   

    Verileri eklediğimde sorun yok ama silmeye yada günceleştirdiğimde aynı hatayı veriyor

    • Düzenleyen Zerhan 21 Mart 2013 Perşembe 17:01
    21 Mart 2013 Perşembe 16:57
  • Şunları ekleyerek dener misin?

            public SqlHelper()
            {
                con = new SqlConnection("Server=.;Database=Kayit;Trusted_Connection=True;");
                cmd = new SqlCommand("SELECT Isim,Eposta,KullaniciAdi,KullaniciSifre FROM Kullanicilar", con);
                da = new SqlDataAdapter(cmd);
                cb = new SqlCommandBuilder(da);
    
                da.DeleteCommand = cb.GetDeleteCommand();
                da.UpdateCommand = cb.GetUpdateCommand();
    
                ds = new DataSet();
                da.Fill(ds, "Kullanicilar");
            }

    21 Mart 2013 Perşembe 17:18
    Moderatör
  • Olmadı kardeş denedim aynı hatayı verdi bana yav kusura bakma seni çok uğraştırıyorum
    21 Mart 2013 Perşembe 17:38
  • Yok canım uğraşı değil, neyse ki hızlı dönüyorsun. Tek seferde çözdüğümüz bir sorunun olmadı senin de:)

    Aşağıdaki eklemeyi yaparak dene bir de.

    public SqlHelper() { con = new SqlConnection("Server=.;Database=Kayit;Trusted_Connection=True;"); cmd = new SqlCommand("SELECT Isim,Eposta,KullaniciAdi,KullaniciSifre FROM Kullanicilar", con); da = new SqlDataAdapter(cmd); cb = new SqlCommandBuilder(da); ds = new DataSet(); da.Fill(ds, "Kullanicilar");
          da.FillSchema(ds, SchemaType.Mapped, "Kullanicilar");

    }


    Emin değilim ama ilgili id ile ilgili sonuç bulunup bulunmadığını da kontrol et, yoksa hata dönebilir.
    21 Mart 2013 Perşembe 17:44
    Moderatör
  • Valla şimdi bu hatayı verdi :)

    Bu interface kaynak kodları

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WindowsFormsApplication19
    {
        interface IDatabase
        {
            int AddData(string isim, string eposta, string kullaniciAdi, string kullaniciSifre);
            int DeleteData(int kullanicilarID);
            int UpdataData(int kullanicilarID, string isim, string eposta, string kullaniciAdi, string kullaniciSifre);
    
        }
    }
    

    AcHelper Sınıfı 

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.OleDb;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WindowsFormsApplication19
    {
        class AcHelper : IDatabase
        {
            OleDbConnection con;
            OleDbCommand cmd;
            OleDbDataAdapter da;
            OleDbCommandBuilder cb;
            DataSet ds;
    
            public AcHelper()
            {
                con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0.0;Data Source=E:\Kayit.accdb");
                cmd = new OleDbCommand("SELECT KullanicilarID,Isim,Eposta,KullaniciAdi,KullaniciSifre FROM Kullanicilar", con);
                da = new OleDbDataAdapter(cmd);
                cb = new OleDbCommandBuilder(da);
                ds = new DataSet();
                da.Fill(ds, "Kullanicilar");
            }
    
            public int AddData(string isim, string eposta, string kullaniciAdi, string kullaniciSifre)
            {
                DataRow dr = ds.Tables["Kullanicilar"].NewRow();
                dr["Isim"] = isim;
                dr["Eposta"] = eposta;
                dr["KullaniciAdi"] = kullaniciAdi;
                dr["KullaniciSifre"] = kullaniciSifre;
                ds.Tables["Kullanicilar"].Rows.Add(dr);
                return da.Update(ds, "Kullanicilar");
            }
    
            public int DeleteData(int kullanicilarID)
            {
                DataRow dr = ds.Tables["Kullanicilar"].Rows.Find(kullanicilarID);
                ds.Tables["Kullanicilar"].Rows.Remove(dr);
                return da.Update(ds, "Kullanicilar");
            }
    
            public int UpdataData(int kullanicilarID, string isim, string eposta, string kullaniciAdi, string kullaniciSifre)
            {
                DataRow dr = ds.Tables["Kullanicilar"].Rows.Find(kullanicilarID);
                dr["Isim"] = isim;
                dr["Eposta"] = eposta;
                dr["KullaniciAdi"] = kullaniciAdi;
                dr["KullaniciSifre"] = kullaniciSifre;
                return da.Update(ds, "Kullanicilar");
            }
        }
    }
    

    SqlHelper kaynak kodları 

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WindowsFormsApplication19
    {
        class SqlHelper : IDatabase
        {
            SqlConnection con;
            SqlCommand cmd;
            SqlDataAdapter da;
            SqlCommandBuilder cb;
            DataSet ds;
    
    
            public SqlHelper()
            {
                con = new SqlConnection("Server=.;Database=Kayit;Trusted_Connection=True;");
                cmd = new SqlCommand("SELECT KullanicilarID,Isim,Eposta,KullaniciAdi,KullaniciSifre FROM Kullanicilar", con);
                da = new SqlDataAdapter(cmd);
                cb = new SqlCommandBuilder(da);
                da.FillSchema(ds, SchemaType.Mapped, "Kullanicilar");
                ds = new DataSet();
                da.Fill(ds, "Kullanicilar");
            }
    
            public int AddData(string isim, string eposta, string kullaniciAdi, string kullaniciSifre)
            {
                DataRow dr = ds.Tables["Kullanicilar"].NewRow();
                dr["Isim"] = isim;
                dr["Eposta"] = eposta;
                dr["KullaniciAdi"] = kullaniciAdi;
                dr["KullaniciSifre"] = kullaniciSifre;
                ds.Tables["Kullanicilar"].Rows.Add(dr);
                return da.Update(ds, "Kullanicilar");
            }
    
            public int DeleteData(int kullanicilarID)
            {
                DataRow dr = ds.Tables["Kullanicilar"].Rows.Find(kullanicilarID);
                ds.Tables["Kullanicilar"].Rows.Remove(dr);
                return da.Update(ds, "Kullanicilar");
            }
    
            public int UpdataData(int kullanicilarID, string isim, string eposta, string kullaniciAdi, string kullaniciSifre)
            {
                DataRow dr = ds.Tables["Kullanicilar"].Rows.Find(kullanicilarID);
                dr["Isim"] = isim;
                dr["Eposta"] = eposta;
                dr["KullaniciAdi"] = kullaniciAdi;
                dr["KullaniciSifre"] = kullaniciSifre;
                return da.Update(ds, "Kullanicilar");
            }
        }
    }
    

    Buda Silme kodları 

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication19
    {
        public partial class frmDeleteUser : Form
        {
            public frmDeleteUser()
            {
                InitializeComponent();
            }
    
            private void btnDelete_Click(object sender, EventArgs e)
            {
                int effectedRows = 0;
    
                if (cbDatabase.Text == "SQL SERVER")
                {
                    IDatabase iData = new SqlHelper();
                    effectedRows = iData.DeleteData(Convert.ToInt32(txtID.Text));
                }
                else if(cbDatabase.Text == "ACCESS")
                {
                    IDatabase iData = new AcHelper();
                    effectedRows = iData.DeleteData(Convert.ToInt32(txtID.Text));
                }
    
                if (effectedRows>0)
                {
                    MessageBox.Show("The data has deleted successfully");
                }
                else
                {
                    MessageBox.Show("The data hasn't been deleted");
                }
            }
        }
    }
    

    • Düzenleyen Zerhan 21 Mart 2013 Perşembe 17:59
    21 Mart 2013 Perşembe 17:55
  • Peki bu hatayı nerede verdi?
    21 Mart 2013 Perşembe 17:57
    Moderatör
  • Delete komutu uyguladığımda bu hatayı veriyor
    21 Mart 2013 Perşembe 18:02
  • Interface'i devredışı bırakarak dene.
    21 Mart 2013 Perşembe 18:43
    Moderatör
  • Valla kardeş interfaci devre dışı bıraktım gene olmadı gene bu hatayı verdi 

    21 Mart 2013 Perşembe 18:55
  • Şemayı çektiğinde hata vermemesi gerek.
    21 Mart 2013 Perşembe 19:02
    Moderatör
  • Verileri çektiğimde hata vermiyorum ama bir türlü Update Delete komutları işlemiyor
    21 Mart 2013 Perşembe 19:16
  • Kendimdeki benzer bir örnekle şu aşağıdaki şekilde iş görüyor. DataTable yerine dataset yapınca olmuyor. Remove yerine Delete...

            public int DeleteData(int kullanicilarID)
            {
                DataTable dt = ds.Tables["Kullanicilar"];
                DataRow dr = dt.Rows.Find(kullanicilarID);
                dr.Delete();
                return da.Update(dt);
            }

    21 Mart 2013 Perşembe 21:08
    Moderatör
  • Bunuda yaptım gene  bende aynı hatayı veriyor olmuyor acaba bu sorun sadece benden mi kaynaklanıyor anlamadım ki 
    21 Mart 2013 Perşembe 22:03
  • Paylaş istersen veritabanınla projeni veya bir örneğini.
    21 Mart 2013 Perşembe 22:14
    Moderatör
  • Kardeş bu benim projemdir burdan indirebilirisin

    http://www.yukletr.com/download.php?file=3442795ac64bbcf2ece23a1fd3be17b7

    veritabanıda şöyledir tam olarak

    21 Mart 2013 Perşembe 22:22
  • using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WindowsFormsApplication19
    {
        class SqlHelper : IDatabase
        {
            SqlConnection con;
            SqlCommand cmd;
            SqlDataAdapter da;
            DataSet ds;
    
    
            public SqlHelper()
            {
                con = new SqlConnection("Server=.;Database=Kayit;Trusted_Connection=True;");
                cmd = new SqlCommand("SELECT KullaniciID,isim,Eposta,KullaniciAdi,KullaniciSifre FROM Kullanicilar", con);
                da = new SqlDataAdapter(cmd);
                SqlCommandBuilder cb = new SqlCommandBuilder(da);
                ds = new DataSet();
                da.Fill(ds, "Kullanicilar");
                da.FillSchema(ds,SchemaType.Source,"Kullanicilar"); //bunu kullanmamışsın
            }
    
            public int AddData(string isim, string eposta, string kullaniciAdi, string kullaniciSifre)
            {
                DataRow drAdd = ds.Tables["Kullanicilar"].NewRow();
                drAdd["Isim"] = isim;
                drAdd["Eposta"] = eposta;
                drAdd["KullaniciAdi"] = kullaniciAdi;
                drAdd["KullaniciSifre"] = kullaniciSifre;
                ds.Tables["Kullanicilar"].Rows.Add(drAdd);
                return da.Update(ds, "Kullanicilar");
            }
    
            public int DeleteData(int kullanicilarID)
            {
                DataTable dt =ds.Tables["Kullanicilar"];
                DataRow drDel = dt.Rows.Find(kullanicilarID);
                drDel.Delete();
                return da.Update(dt);
            }
    
            public int UpdataData(int kullanicilarID, string isim, string eposta, string kullaniciAdi, string kullaniciSifre)
            {
                DataTable dt = ds.Tables["Kullanicilar"];
                DataRow drUp = dt.Rows.Find(kullanicilarID);
                drUp["Isim"] = isim;
                drUp["Eposta"] = eposta;
                drUp["KullaniciAdi"] = kullaniciAdi;
                drUp["KullaniciSifre"] = kullaniciSifre;
                return da.Update(dt);
            }
           
        }
    }
    

    Tekrar bir hatırlatma, id yoksa veritabanında hata alırsın kesin.
    • Yanıt Olarak İşaretleyen Zerhan 22 Mart 2013 Cuma 07:27
    22 Mart 2013 Cuma 05:40
    Moderatör
  • vallahi oldu çok teşekkür ederim ama bunu neden kullanacam tam olarak ne işe yarıyor kardeş?

    da.FillSchema(ds,SchemaType.Source,"Kullanicilar"); //bunu kullanmamışsın

    22 Mart 2013 Cuma 07:28
  • Tablonun tam yapılandırmasını da datasete alıyoruz. Birincil anahtar olduğunu biliyor bu şekilde.
    22 Mart 2013 Cuma 07:44
    Moderatör