En iyi yanıtlayıcılar
Split ile veri çekme

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
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
-
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
-
-
-
-
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.
-
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:(
-
-
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 :)
-
-