none
Split ile veri çekme RRS feed

  • Soru

  • Merhaba arakadaşlar,

    Ekleme işleminde eklettirdiğim ürüne "Etiket" eklettiriyorum "tag1,tag2,tag3,tag4,tag5" gibi sonra bunları etiketler tablosuna kayıt ettiriyorum. 

     SqlConnection baglanti = system.baglan();
            String[] tagDizi = txt_etiket.Text.Split(',');
            for (int i = 0; i < tagDizi.Length; i++)
            { 

    insert işlemi

           }

    Daha sonra bu verileri güncellemem gerekecek. Ama txt_etiket.text alanıma eklettirmiş olduğum verileri yan yana aralarında virgül olarak çektiremedim. Şöyle bir kod yazdım çekmek için başaramadım.

    DataTable dt = new DataTable();
              da.Fill(dt);

              string alletiket = "";
              for (int i = 0; i <= dt.Rows.Count - 1; i++)
              {
                  if (i > 1)
                  {
                      alletiket = ",";
                  }
                  alletiket = dt.Rows[0]["EtiketAdi"].ToString();

                  txt_etiket.Text = dt.Rows[0]["EtiketAdi"].ToString();
              }

    Eklettirme işleminde her etiketi ayrı bir stuna eklettiriyorum. ve eklenen her etikete hangi ürüne eklendiyse o ürünün ID'sinide eklettiriyorum. Yani tabloda for ile dönmem gerekiyor o ID'e ait tüm etiketleri bulup yan yana yazması gerekiyor. aralarında virgül olarak.

    Diğer bir sorum ise; Diyelim ki Tüm etiketleri yan yana çektirdim yardımlarınızda Güncellemesini yapmak istediğim ürüne ait 3 tane etiket var 

    EtiketID - EtiketAdi - UrunID

    1              etiket1       22

    2              etiket2       22

    3              etiket3       22

    Ben güncelleme esnasında txt_etiket.text'in içinden "etiket3" 'ü sildim diyelim. Güncelle butonuna bastığımda güncellediğim verilerin etiketler tablosuna eklenmesini istiyorum. Eğer etiketleri kaldırydıysam etiketler tablosundan kaldırdığım etiketlerin silinmesini istiyorum. 

    Teşekkürler

    25 Haziran 2013 Salı 17:36

Yanıtlar

  • Soruyu dogru mu anladim acaba:

    Etiket #1, Etiket #2,Etiket #3,Etiket #4,Etiket #5,... I split ile ayirip her birini ayri kayitta sakladin. Simdi gene Etiket #1, Etiket #2,Etiket #3,Etiket #4,Etiket #5,.. yapmak istiyorsun. Dogru mu? Dogruysa oyle datatable ile filan ugrasma, basitce Linq ile yap:

    void Main()
    {
      var etiketler = "Etiket #1, Etiket #2,Etiket #3,Etiket #4,Etiket #5";
      
      var splitted = etiketler.Split(',');
      
      var birlesmis = string.Join(",", splitted);
      
      Console.WriteLine (birlesmis);
    }

    Splitted'i veritabanindan almak icin tum ihtiyacin bir DataContext. ornegin:

    DataContext db = new DataContext(@"server=.\SQLexpress;trusted_connection=yes;database=DbAdi"); var splitted = from kayit in db.GetTable<Model>() //istersen sartli
    // where kayit.Id = 2
    select kayit.TagKolonu; [Table(Name="TabloAdi"] public class Model { [Column(Name="TagKolonununAdi")] public string TagKolonu {get;set;}

      [Column]
      public int Id {get;set;}}


    • Yanıt Olarak Öneren Ali Rıza İnceoğlu 26 Haziran 2013 Çarşamba 06:36
    • Yanıt Olarak İşaretleyen SerkanKLC 27 Haziran 2013 Perşembe 09:47
    25 Haziran 2013 Salı 18:36
  • Cektiremedim kismini anlamadim. Sana RDBMS de kullansan verileri ceken kodu vermedim mi zaten? Anlayamadigin kismi anlarsak daha iyi.
    • Yanıt Olarak İşaretleyen SerkanKLC 27 Haziran 2013 Perşembe 09:47
    26 Haziran 2013 Çarşamba 11:28

Tüm Yanıtlar

  • Soruyu dogru mu anladim acaba:

    Etiket #1, Etiket #2,Etiket #3,Etiket #4,Etiket #5,... I split ile ayirip her birini ayri kayitta sakladin. Simdi gene Etiket #1, Etiket #2,Etiket #3,Etiket #4,Etiket #5,.. yapmak istiyorsun. Dogru mu? Dogruysa oyle datatable ile filan ugrasma, basitce Linq ile yap:

    void Main()
    {
      var etiketler = "Etiket #1, Etiket #2,Etiket #3,Etiket #4,Etiket #5";
      
      var splitted = etiketler.Split(',');
      
      var birlesmis = string.Join(",", splitted);
      
      Console.WriteLine (birlesmis);
    }

    Splitted'i veritabanindan almak icin tum ihtiyacin bir DataContext. ornegin:

    DataContext db = new DataContext(@"server=.\SQLexpress;trusted_connection=yes;database=DbAdi"); var splitted = from kayit in db.GetTable<Model>() //istersen sartli
    // where kayit.Id = 2
    select kayit.TagKolonu; [Table(Name="TabloAdi"] public class Model { [Column(Name="TagKolonununAdi")] public string TagKolonu {get;set;}

      [Column]
      public int Id {get;set;}}


    • Yanıt Olarak Öneren Ali Rıza İnceoğlu 26 Haziran 2013 Çarşamba 06:36
    • Yanıt Olarak İşaretleyen SerkanKLC 27 Haziran 2013 Perşembe 09:47
    25 Haziran 2013 Salı 18:36
  • Boyle etiket taglari filan saklayacaksan, hic NoSQL databaselere baktin mi? Mesela bunu MongoDb ile yapmak cocuk oyuncagi (veya RavenDb, daha yavas geldi bana ama olabilir).
    25 Haziran 2013 Salı 18:38
  • hiç linq ile veri çekmedim ve işlem de yapmadım :) çocuk oyuncağı dediğiniz yapı bana yabancı olduğundan karışık geldi :)
    25 Haziran 2013 Salı 19:43
  • Hata, tag'ları split edip ayrı tabloya yazma fikrinden kaynaklı bence. Tagları olduğu gibi ürün tablosunda bıraksaydınız bu dertleri açmazdı başınıza. Bence tablo tasarımı hatalı.

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC

    26 Haziran 2013 Çarşamba 07:02
    Moderatör
  • farklı şeyler düşündüğüm için 2 tabloda işlem yapmak istedim. Yani 1 tabloda yapamam diye 2. bir tablo oluşturdum.

    her tag'ın adını adres çubuğuna göndereceğim  girilen her tagı replace edip kaydettirmem gerekiyordu.

    her tag için description girmem gerekiyor.

    ve bir etiketten birden çok varsa ve kullanıcı o etiketlerden birine tıkladıysa tıkladığı etiket adı ile başka etiketler var ise o etiketlere bağlı ürünleri listelettirmek istediğim için böyle bir yapı yapmak istedim.

    26 Haziran 2013 Çarşamba 10:07
  • Onay,

    Bence tablo tasarimi hatali degil. Ne yazik ki RDBMS ile boyle. O taglari sorgulayabilmek isteyecek. Sorgulayabilmesi icin de iki yol var:

    1) ID:1, Taglar: "Etiket #1, Etiket #2, Etiket #3, ..." gibi buyuk bir varchar icerisinde geciyor mu diye bakmak (fulltext search).

    2)  ID, Tag

    1, Etiket #1
    1, Etiket #2
    1, Etiket #3
    1, Etiket #4
    ...

    icerisinde Tag = '...' diye aramak.

    1.Yontemin hem indexleme derdi var, hem de binlerce tag icerisinde 3'unu degistirmen gerekse o kaydi tumuyle degistirmen gerekiyor.

    2.Yontem indexlenebilir ve tam da iliskisel veritabanlarinin calisma mantigina uygun.

    MongoDb olsaydi :) o taglar basitce ayni kaydin icerisinde array olarak yer alirdi:

    Id: 1, Taglar: [Etiket #1, Etiket #2, Etiket #3, ...]

    ve array elemanlari indexlenirdi (ekleme, cikarma, guncelleme de cok basit, dogrudan array ile islem yapan pull, pullAll, push, pushAll, addToSet, pop, each, slice, sort, () gibi fonksiyonlar var). Ayni anda cok basit bir sekilde "Etiket #1" veya "Etiket #2" olanlar, ya da RDBMS ile cok da kolay olmayan, hem "Etiket #1" hem de "Etiket #2" olanlar diye arama yapabiliyorsun ( MondoDb dokumanindan:

    db.inventory.find( { tags: { $all: [ "appliances", "school", "book" ] } } )

      ).

    Yani bana daha dogru secim gibi geliyor MongoDb (isin ilginci MongoDb'ye yeni baslayanlara en cok gosterilen ornek bu taglar ornegi:). Bir ogrenme periyodu gerekiyor ama RDBMS'e kiyasla inanilmaz derecede kisa. Hani ilgilenen olursa diye asagida ornek bir MongoDb yapisi (C# gibi statically typed dil oldugundan karisik gorunuyor, yoksa duz Json).

    Bir turlu vakit bulamadim, yoksa MongoDb ornekleri olan bir seri yazmak istiyordum:(

    26 Haziran 2013 Çarşamba 10:38
  • Ornek Mongodb yapisi verecektim, sonradan vazgectim yaziyi uzatmamak icin.

    Not: Hala duzeltme calismiyor, yine ayri mesaj olarak eklemek zorunda kaldim.

    26 Haziran 2013 Çarşamba 10:40
  • Halen düşünüyorum, MongoDb olayına mı baksam ? bir kaç makeleye baktım yapılabilir gibi gözüküyor ama şuanda o riske girmekte pek istemiyorum.

    Yada ;

    string[] dizi = drHaber["Keyword"].ToString().Split(',');
                lbltag.Text = "";
                for (int i = 0; i < dizi.Length; i++)
                {

    }

    Bu şekilde kastırmaya devam mı etsem. Gerçi kastırsamda halen verileri çektiremedim :)

    26 Haziran 2013 Çarşamba 10:55
  • Cektiremedim kismini anlamadim. Sana RDBMS de kullansan verileri ceken kodu vermedim mi zaten? Anlayamadigin kismi anlarsak daha iyi.
    • Yanıt Olarak İşaretleyen SerkanKLC 27 Haziran 2013 Perşembe 09:47
    26 Haziran 2013 Çarşamba 11:28
  • O mesaj alanını ben hiç görmemiştim. Şimdi fark ettim. Cevap için teşekkürler.
    27 Haziran 2013 Perşembe 09:47