none
true değerine bir değişkene atamak. Yardımcı olabilirmisiniz. RRS feed

  • Soru

  • merhaba. bir yerde takıldım. veritabanından true değeri geliyor ve bunu if içinde karışlaştırma yapmak istiyorum acak bir türlü true ile karşılaştırma yapamadım. nerede yanlış yapıyorum.

    SqlConnection baglanti = klas.baglan();
                    SqlCommand yetki = new SqlCommand("SELECT Admin FROM dbo.Yetkiler where OgretmenID==" + OgretmenID,baglanti);
                    double yetkim = Convert.ToDouble(yetki.ExecuteScalar); 
                    if(yetkim == null || yetkim == "")
                    {
                    }

    12 Şubat 2017 Pazar 21:11

Yanıtlar

  • Bu şekilde parametresiz sorgu yazmayın. Çokbüyük bir güvenlik açığı oluşturmuş olursunuz. Sorunuza gelince SQL de eşitlik karşılaştırması == ile değil = ile yapılır. yetkim değişkeni null değer alabilen bir tür değil eğer null değer alabiliyorsa double, bool, int yerine double?, bool?, int? yazılır ve dönüşümler ona göre yapılır. Eğer null olabiliyorsa aşağıdaki kodlarda bool olan kısımları bool? olarak değiştirmelisin

    SqlConnection baglanti = klas.baglan();
    SqlCommand yetki = baglanti.CreateCommand();
    yetki.CommandText = "Select Admin From dbo.Yetkiler Where OgretmenID = @ogretmenID";
    yetki.Parameters.AddWithValue("@ogretmenID", OgretmenID);
    bool yetkim = (bool)yetki.ExecuteScalar();
    if(yetkim)
    {
      //Yetki Var
    }
    else
    {
      //Yetki Yok
    }

    • Yanıt Olarak İşaretleyen CÜNEYT.A 13 Şubat 2017 Pazartesi 11:11
    13 Şubat 2017 Pazartesi 07:39

Tüm Yanıtlar

  • Verdiğin kod ile sorduğun soru birbiri ile çelişiyor.  yetkim double değer.  if satırında string ile karşılaştırıyorsun, hata vermiyor mu?

    Yapmak istediğin tam olarak nedir?  True derken ne demek istiyorsun?

    12 Şubat 2017 Pazar 22:17
  • yapmak istediğim şey şu.

    veritabanındaki veri çekiyorum. gelen değer true veya false.

    bu gelen true veya false göre işlem yaptırmak istiyorum.

    yani 

    SqlConnection baglanti = klas.baglan();
                    SqlCommand yetki = new SqlCommand("SELECT Admin FROM dbo.Yetkiler where OgretmenID==" + OgretmenID,baglanti);
                   
                    if(yetki==true)
                    {

    pnlMenu.visible=true;
                    }

    gibi.... bunu yapmak istiyorum. ancak veritabanından gelen true veya false if içinde bir türlü karşılaştıramıyorum. uyarılarda bunu bool yap veya dönüştür diyor. bunu nasıl yapabilirim. yardımcı olurmusunuz.

    13 Şubat 2017 Pazartesi 06:26
  • Bu şekilde parametresiz sorgu yazmayın. Çokbüyük bir güvenlik açığı oluşturmuş olursunuz. Sorunuza gelince SQL de eşitlik karşılaştırması == ile değil = ile yapılır. yetkim değişkeni null değer alabilen bir tür değil eğer null değer alabiliyorsa double, bool, int yerine double?, bool?, int? yazılır ve dönüşümler ona göre yapılır. Eğer null olabiliyorsa aşağıdaki kodlarda bool olan kısımları bool? olarak değiştirmelisin

    SqlConnection baglanti = klas.baglan();
    SqlCommand yetki = baglanti.CreateCommand();
    yetki.CommandText = "Select Admin From dbo.Yetkiler Where OgretmenID = @ogretmenID";
    yetki.Parameters.AddWithValue("@ogretmenID", OgretmenID);
    bool yetkim = (bool)yetki.ExecuteScalar();
    if(yetkim)
    {
      //Yetki Var
    }
    else
    {
      //Yetki Yok
    }

    • Yanıt Olarak İşaretleyen CÜNEYT.A 13 Şubat 2017 Pazartesi 11:11
    13 Şubat 2017 Pazartesi 07:39
  • ExecuteScalar()'dan gelen değeri cast yapmadan önce true/false denetimi yapman gerekiyor. Örnek verdim:

    object obj;
    int id = 0;
    if ((obj = cmd.ExecuteScalar()) == null)
    {
        Console.WriteLine("ExecuteScalar() == null: Aranılan değer tabloda bulunmuyor.");
    }
    else
    {
        id = (Int32)obj;
        Console.WriteLine("Değer: " + id);
    }

    Eğer senin yaptığın gibi önce cast yaparsan, (Int32) null değerini sıfıra çevirir.  Yukardakini test ettim, çalışıyor.
    13 Şubat 2017 Pazartesi 09:00
  • Teşekkür ederim. çalıştı.
    13 Şubat 2017 Pazartesi 11:11