none
Mükerrer Kayıt Hakkında RRS feed

  • Soru

  • Üstadlar Selam,

    Veri tabanında ki ilgili tabloma kayıt yapıyorum. Fakat şöyle bir sorun var textboxdaki alanlarımın bazılarını boş olarak kayıt yapmak istediğimde veri tabanında boş olan kayıt yoksa kayıt ediyor ama ikinci veri girişimde boş alanları da mükerrer olarak görüyor umarım anlatabilmişimdir. :/ neden boş alanları mükerrer olarak görüyor?

    mükerrer ilgili kodu aşağıda paylaşıyorum 

    SqlConnection baglan = new SqlConnection(bgl.baglanti);
                baglan.Open();
                SqlCommand muk = new SqlCommand("Select * from personel where katid=@katid and dolapid=@dolapnumara", baglan);
                muk.Parameters.AddWithValue("@katid", katayrim.Text);
                muk.Parameters.AddWithValue("@dolapnumara", dolapnoliste.Text);
                SqlDataReader dr = muk.ExecuteReader();
                if (dr.Read())
                {
                    durum = false;
                }
                else
                {
                    durum = true;

                }

                baglan.Close();

    13 Eylül 2019 Cuma 18:12

Yanıtlar


  • Bir ornek kod vereyim, orada senin istedigin gibi, textbox'ta yazdıkça, o yazılanla baslayan ilk kayıt comboda seciliyor:

    void Main()
    {
    	DataContext db = new DataContext(@"server=.\SQLexpress;trusted_connection=yes;database=Northwind");
    
    	Table<Customer> customers = db.GetTable<Customer>();
    
    	Form f = new Form { Text = "ComboBox ornek", Height = 200, Width = 1000 };
    	TextBox txtCustomerId = new TextBox { Left = 10, Top = 10 };
    	ComboBox cb = new ComboBox { Left = 10, Top = 60, Width = 950, Font = new Font("Courier New", 8) };
    
    	f.Controls.AddRange(new Control[] { txtCustomerId, cb });
    	cb.DataSource = customers.ToList();
    	cb.DisplayMember = "fullName";
    	cb.ValueMember = "customerId";
    	cb.SelectedValue = "";
    
    	txtCustomerId.TextChanged += (sender, e) =>
    	{
    		var s = (sender as TextBox).Text.Trim().ToUpper();
    		var customer = cb.Items.OfType<Customer>().FirstOrDefault(c => c.CustomerID.StartsWith(s));
    		cb.SelectedItem = customer;
    	};
    
    	f.Show();
    }
    
    [Table(Name = "Customers")]
    public class Customer
    {
    	[Column]
    	public string ContactName { get; set; }
    	[Column]
    	[Key]
    	public string CustomerID { get; set; }
    	[Column]
    	public string CompanyName { get; set; }
    	[Column]
    	public string City { get; set; }
    
    	public string FullName
    	{
    		get
    		{
    			return $"{CompanyName,-40} | [{City,-15}] | {CustomerID}";
    		}
    		private set { }
    	}
    }



    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.

    • Yanıt Olarak İşaretleyen zkannn 21 Eylül 2019 Cumartesi 11:19
    16 Eylül 2019 Pazartesi 20:32
    Yanıtlayıcı

Tüm Yanıtlar

  • merhaba, yeni kayıt yapacağınız zaman alanları temizledikten sonra kayıt yaptığınızda sorun oluyor mu, benim de başıma gelmişti, temizleme işlemi yaptırdım sonra hata almadım, bir deneyin isterseniz
    13 Eylül 2019 Cuma 19:25
  • Sorunuz pek anlasilmiiyor ve\veya verdiginiz kodla ilgisini kuramadım.

    Verdiginiz kod icin:

    AddWithValue kullanmayın, Add kullanın (katid ve dolapid, her ikisi de string mi???).

    Kodunuz sadece "var mi" kontrolu yapıyor ama gerekesiz yere tum alanları seciyor ve islem aslında scalar olmasina ragmen sanki bir set seçiyormuşsunuz gibi kodlanmış. Onun yerine şöyle daha uygun:

    bool durum = false;
    using (SqlConnection baglan = new SqlConnection(bgl.baglanti))
    using (SqlCommand cmd = new SqlCommand(@"select count(*)
              from personel
              where katid=@katid and dolapid=@dolapnumara", baglan))
    {
       cmd.Parameters.Add("@katid", SqlDbType.VarChar).Value = katayrim.Text;
       cmd.Parameters.Add("@dolapnumara", SqlDbType.VarChar).Value = dolapnoliste.Text);
    
       baglan.Open();
       durum = (cmd.ExecuteScalar() == 0);
       baglan.Close();
    }
    

    Tabii sorunuzda bahsettiginiz mükerrer ile bu kodun ilgisini kuramadım.



    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.

    13 Eylül 2019 Cuma 20:26
    Yanıtlayıcı
  • Çetin hocam her ikiside string sonradan değiştirdim.

    3 adet combobox kullamıyorum bunlara verilerimi seçiyorum. bunlarda departman, kat, dolap ama her personelin dolabı olmayabilir bu yüzden bu comboboxdan dolap katı seçmiyorum boş olarak veri tabanına kayıt yapabiliyorum ama ikinci personeli kayıt yapmak istediğimde ve bu personelinde dolap numaranı boş olarak girdiğimde comboboxdan seçmediğimde bana uyarı veriyor mükerer kayıt var diye ama veri tabanında kayıt yok boş olan alanları da mükerrer olarak görüyor

    • Düzenleyen zkannn 13 Eylül 2019 Cuma 21:06
    13 Eylül 2019 Cuma 21:00
  • Çetin hocam her ikiside string sonradan değiştirdim.

    3 adet combobox kullamıyorum bunlara verilerimi seçiyorum. bunlarda departman, kat, dolap ama her personelin dolabı olmayabilir bu yüzden bu comboboxdan dolap katı seçmiyorum boş olarak veri tabanına kayıt yapabiliyorum ama ikinci personeli kayıt yapmak istediğimde ve bu personelinde dolap numaranı boş olarak girdiğimde comboboxdan seçmediğimde bana uyarı veriyor mükerer kayıt var diye ama veri tabanında kayıt yok boş olan alanları da mükerrer olarak görüyor

    Gerçek mükerrerlik kontrolünü DB ye bırakın. Unique key tanımlayın. Kaydet'e basmadan önce uyarmak gibi UX yapıyorsanız o zaman kod ile de  mükerrer durumu kontrol edin. Yukarıdaki gibi eş zamanlılık kontrolü olmayan bir kodda kontrol her zaman çalışmayacak ve istenmeyen kayıtlar oluşacaktır.

    www.cihanyakar.com


    13 Eylül 2019 Cuma 22:33
  • Ya kusura bakma ben hala anlayamadım. 

    Personellerin birisinin, ya da hiçbirinin dolabı olmayabilir, bu neden mükerrer kayit olsun ki? Mükerrer kayit tanımın nasıl? Tablo yapilarini görme sansimiz var mi?



    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.


    14 Eylül 2019 Cumartesi 06:57
    Yanıtlayıcı
  • Çetin hocam daha detaylandırayım.

    personel, departman, dolapno diye üç tane tablom var.

    şimdi personelin departman gereği dolabı olmayabilir. dolapno tablosunda kat ve dolap numaralarını tanımlıyorum 1. katın 10 tane dolabını tutuyor. xxx personele 1. katın 1. dolabını veriyorum kayıt ediyorum. y personele aynı kata aynı dolabı vermek istediğimde uyarı verdiriyorum. Ama başka bir personele kat ve dolap tanımlaması yapmadan sadece isim ve departman kaydı yapmak istediğimde ilk veriyi kayıt ediyor sonra başka bir personel kaydını da isim departman yapmak istediğim de kolanlarda veri olamamasına rağmen bu kayıt var hatası veriyor.

    15 Eylül 2019 Pazar 06:04
  • Dediğim gibi tablo yapilarini ve mükerrer kayıt tanimini görmek lazim. Bu sekilde hiçbir şey anlasilmiyor.

    Normalde benim beklediğim:

    PersonelId, Ad, Soyad, DolapId (null)

    gibi bir yapi. Ad, Soyad farklıysa DolapId null da olsa bunlar mükerrer kayıt degil.

    Alternatif bir yapi dolapId'yi personel dosyasında tutmak yerine, dolaplarda personelId tutmak:

    KatId, DolapNo, PersonelId (null)

    Ondan anlamayamıyorum ne demek istediğini.



    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.

    15 Eylül 2019 Pazar 09:53
    Yanıtlayıcı
  • Çetin hocam evet 

    personel tablom personelId, adsoyad, dolapid

    dolapno tablom Id, departmanid, katyrimid, dolapnumara

    soruyu şu şekilde değiştirmek istiyorum çetin hocam

    Personel formunda comboboxa dolapno tablodaki verileri çekiyorum sonra dolapno İd sini personel tabloma kayıt ediyorum 

    Benim şuan ki yapmak istediğim personel tablosundaki id ile dolapno tablosundaki id uyuşuyorsa combobox da bu id ye ait verileri göstermesin istiyorum

    16 Eylül 2019 Pazartesi 16:56

  • Bir ornek kod vereyim, orada senin istedigin gibi, textbox'ta yazdıkça, o yazılanla baslayan ilk kayıt comboda seciliyor:

    void Main()
    {
    	DataContext db = new DataContext(@"server=.\SQLexpress;trusted_connection=yes;database=Northwind");
    
    	Table<Customer> customers = db.GetTable<Customer>();
    
    	Form f = new Form { Text = "ComboBox ornek", Height = 200, Width = 1000 };
    	TextBox txtCustomerId = new TextBox { Left = 10, Top = 10 };
    	ComboBox cb = new ComboBox { Left = 10, Top = 60, Width = 950, Font = new Font("Courier New", 8) };
    
    	f.Controls.AddRange(new Control[] { txtCustomerId, cb });
    	cb.DataSource = customers.ToList();
    	cb.DisplayMember = "fullName";
    	cb.ValueMember = "customerId";
    	cb.SelectedValue = "";
    
    	txtCustomerId.TextChanged += (sender, e) =>
    	{
    		var s = (sender as TextBox).Text.Trim().ToUpper();
    		var customer = cb.Items.OfType<Customer>().FirstOrDefault(c => c.CustomerID.StartsWith(s));
    		cb.SelectedItem = customer;
    	};
    
    	f.Show();
    }
    
    [Table(Name = "Customers")]
    public class Customer
    {
    	[Column]
    	public string ContactName { get; set; }
    	[Column]
    	[Key]
    	public string CustomerID { get; set; }
    	[Column]
    	public string CompanyName { get; set; }
    	[Column]
    	public string City { get; set; }
    
    	public string FullName
    	{
    		get
    		{
    			return $"{CompanyName,-40} | [{City,-15}] | {CustomerID}";
    		}
    		private set { }
    	}
    }



    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.

    • Yanıt Olarak İşaretleyen zkannn 21 Eylül 2019 Cumartesi 11:19
    16 Eylül 2019 Pazartesi 20:32
    Yanıtlayıcı