protected void btnListele_Click(object sender, EventArgs e)
    {            
        using (GridViewFillQueries db = new GridViewFillQueries())
        { grdResult.DataSource = db.ListAll(checkboxAd.Checked,checkboxSoyad.Checked);
            grdResult.DataBind();}

public DataTable ListAll(bool Ad,bool Soyad) {            
       if(Ad){
        sSQL = " SELECT * FROM tblIsimler";
        sSQL += " where Ad= '" + Ad+ "'";}
        if (Soyad) {sSQL += "UNION";
        sSQL += " SELECT * FROM tblSoyadlar";
        sSQL += " where Soyad= '" + soyad+ "'";}

return this.ReturnDataTable();

burdaki sorun ad true geldiğinde sorun yok fakat. ad false gelip soyad true geldiğinde union kısmı patlıyor. sql tarafındaki union kontrolünü nasıl yapmalıyım

soruldu: 09 May '13, 13:13

wifi's gravatar image

wifi
748384454
cevap kabul oranı: 100%

değiştirildi: 09 May '13, 13:20

1

ad kısmı neden boolean? Tüm adlar "true" ve "false" mu? Yoksa "adları getir" ve/veya "soyadları getir" şelinde mi yazmak istiyorsunuz?

(10 May '13, 04:23) nurettin nurettin's gravatar image

iki tane check box var. ad seçili ise adları getirecek. soyad seçili ise soyadları getirecek.checked ise true yolluyorum bende.

(10 May '13, 11:28) wifi wifi's gravatar image

if bloğunuz bence hatalı eğer Ad değişkeni false olursa sSQL = "UNION .... diye başlayan bir ifade üretir. Doğal olarak da bu geçersiz bir ifade olur. ikinci if ifadesinde if else yapmalısınız if (Ad) & (Soyad) ile mevcut sSQL değerlerini oluşturduğunuz gibi kalmalı else if not(Ad) & (Soyad) ile sSQL = "Select ... ile başlamalısınız.

(10 May '13, 16:04) ertuncefeoglu ertuncefeoglu's gravatar image

"UNION" aynı sütunları döndüren iki sorguyu birlerştirmek için kullanılır. Yukarıda yazdığın örnekte Ad false geldiğinde SQL sorgusu direkt UNION ile başlıyor. Bu da hataya sebep oluyor. Eğer sen isimleri tuttuğun bir tablodan bir ismi ve soy isimleri tuttuğun bir tablodan bir soy ismi cekmek istiyorsan, belki aşşaığdaki gibi bir sorguyu deneyebilirisin ;

SELECT ISM.Ad, SOY.Soyad FROM tblIsimler ISM, tblSoyadlar SOY 
WHERE Ad= '" + Ad+ "'" AND Soyad= '" + soyad + "'";

Ancak bu sorgu oldukça büyük bir küme oluşturup içinden istediklerini bulmaya çalışacaktır. Bence veritabanı yapını tekrar gözden geçirmelisin ve eğer mümkünse değiştirmelisin.

permanent link

cevaplandı: 10 May '13, 03:42

mceliksoy's gravatar image

mceliksoy ♦
6.5k84988
cevap kabul oranı: 25%

ad ve soyad diye iki checkbox ım var. union da farklı sayıda ve farklı isimde sütun döndüren select sorgularını birleştiremez miyim?

(10 May '13, 11:31) wifi wifi's gravatar image
1

@wifi her iki subquery de de aynı alan adlarını ve aynı sayıda alanı döndürmelisin. İki grup sorguda farklı tablolar ve alanlar söz konusuysa, eşleşmeyen alanlar için boş değer döndürebiliyor olman lazım. Ancak sıralamaya dikkat et. Yani (select ad, '' from adlar) union (select '', soyad from soyadlar) gibi. Kullanım amacınızı çok iyi anlayamadım.

(10 May '13, 15:59) ertuncefeoglu ertuncefeoglu's gravatar image
    public DataTable ListAll(bool Ad,bool Soyad) {            
      if(Ad){
         sSQL = " SELECT * FROM tblIsimler";
         sSQL += " where Ad= '" + Ad+ "'";}

    if (Ad) & (Soyad) {
       sSQL += "UNION";
       sSQL += " SELECT * FROM tblSoyadlar";
       sSQL += " where Soyad= '" + soyad+ "'";}
    elseif not(Ad) & (Soyad) {
       sSQL = " SELECT * FROM tblSoyadlar";
       sSQL += " where Soyad= '" + soyad+ "'";
    }

not(Ad) C# için doğru kullanım mı hatırlayamadım (Eğer Ad false ise kontrolü yapmak için). elseif kısmındaki ilk sSQL ifadesinde += değil = kullandım. Çünkü Ad seçili değilse UNION yapılacak bir durum söz konusu değil.

permanent link

cevaplandı: 10 May '13, 16:11

ertuncefeoglu's gravatar image

ertuncefeoglu
7705719
cevap kabul oranı: 20%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×238
×77

Soruldu: 09 May '13, 13:13

Görüntüleme: 1,324 kez

Son güncelleme: 10 May '13, 16:11

powered by BitNami OSQA