Nesne başvurusu bir nesnenin örneğine ayarlanmadı hatası

0

Nesne başvurusu bir nesnenin örneğine ayarlanmadı hatası alıyorum. Veritabanındaki alan 1 ise checkbox ı seçili yapmaya çalışıyorum. Alanın verisini alıyor i değişkenine doğru bir şekilde. Ama if'in içine girdiği zaman checkbox işleminde hata alıyorum.

SqlCommand cmd = new SqlCommand("Select * from Reminder_Info where UserId='" + UserId + "'", connection);
                    SqlDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        int i = Convert.ToInt32(dr[14]);
                        
                        if (i == 1)
                        {
                            CheckBox chk = (CheckBox)DLRemindings.FindControl("chckincessant");
                            chk.Checked = true;
                        }
                        else if (i == 0)
                        {
                            CheckBox chk = (CheckBox)DLRemindings.FindControl("chckincessant");
                            chk.Checked = false;
                        }
                    }

paristanbulima paristanbulima (228)
1 yıl önce sordu

Toplam 1 Cevap


1

Bu kodda pek çok hata olabilir. 

Olabilir diyorum çünkü beklediğiniz değerler boş, null geliyor olabilir.

Örneğin UserId değeri geliyor mu?

Ayrıca string birleştirme yerine SqlParameter kullanırsanız çok daha iyi olur:

SqlCommand cmd = new SqlCommand("Select * from Reminder_Info where UserId=@pUserID", connection);
cmd.Parameters.AddWithValue("@pUserID", UserID);

Yine dr[14])  null geliyor olabilir. 

Çoğunlukla Nesne başvurusu bir nesnenin örneğine ayarlanmadı. hatası, değerni null olan bir nesnenin özelliğine erişilmek istenildiğinde alınır.

Mesela;

CheckBox chk = (CheckBox)DLRemindings.FindControl("chckincessant");
chk.Checked = true;

Burada chk bulunamazsa ne olur?

İşte o zaman  Nesne başvurusu bir nesnenin örneğine ayarlanmadı. hatası alırsınız.

Hatayı gidermek için adım adım, BreakPoint kullanarak, nesneler değer alıyor mu kontrol edin.

Ayrıca bağlantı açıyorsunuz değil mi?
 

  var connection = new SqlConnection("server=.\\Sqlexpress; database=uzmanimnet; Integrated security=SSPI");
            SqlCommand cmd = new SqlCommand("Select * from Posts Where UserId=8", connection);
            connection.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                var i = dr[1];

               
            }
            connection.Close();

 

alattin alattin (7084)
1 yıl önce cevaplandı

  • Merhaba. Kontrol ettim. Bütün değerler geliyor. Onda problem yok. Fakat bir problemi keşfettim; ilk değerleri alıyor, 2. satıra geçmiyor. döngü kayıt sayısı kadar dönüyor ama hep ilk satırın değerlerini alıyor. yani döngü her döndüğünde i değişkeni 1 değerini alıyor. 0 alması gerektiğinde de ilk değeri yani 1i alıyor. Kodu da biraz değiştirdim ama yine hata var. Sorun aynı. Nesne başvurusu... paristanbulima 1 yıl önce
  • Sizin kodunuzu kopyaladım biraz değiştirdim, yukarıda cevabı güncelledim. dr[14] satırında bir hatanız yoksa sorunsuz çalışmalı. Yukarıdaki örnekte 2. kolon değeri (saymaya 0 dan başlıyoruz) ekrana geliyor. alattin 1 yıl önce
  • Benim sorunum for döngümde sanırım. Çünkü hep ilk kaydın değerlerini alıyor. 2. kayda geçmiyor. Ama döngü kayıt sayısı kadar dönüyor. Bakınız kod; while (dr.Read()) { DataListItemCollection dlic = DLRemindings.Items; for (int i = 0; i <= dlic.Count; i++) { int a = Convert.ToInt32(dr[14]); int b = Convert.ToInt32(dr[15]); if (a == 0 & b == 0) { ((CheckBox)DLRemindings.Controls[i].FindControl("chckincessant")).Checked = false; ((CheckBox)DLRemindings.Controls[i].FindControl("chckshift")).Checked = false; } else if (a == 1 & b == 1) { ((CheckBox)DLRemindings.Controls[i].FindControl("chckincessant")).Checked = true; ((CheckBox)DLRemindings.Controls[i].FindControl("chckshift")).Checked = true; } else if (a == 0 & b == 1) { ((CheckBox)DLRemindings.Controls[i].FindControl("chckincessant")).Checked = false; ((CheckBox)DLRemindings.Controls[i].FindControl("chckshift")).Checked = true; } else if (a == 1 & b == 0) { ((CheckBox)DLRemindings.Controls[i].FindControl("chckincessant")).Checked = true; ((CheckBox)DLRemindings.Controls[i].FindControl("chckshift")).Checked = false; } } } paristanbulima 1 yıl önce
  • Anlaşılmıyor mu? paristanbulima 1 yıl önce
  • While döngüsünde bir sorun yok. for döngüsüne gerek yok diye düşünüyorum. hata sanırım burada. For döngüsünü kaldırın. int i =0 tanımlayın while'dan önce. While son satırında i++ yapın. alattin 1 yıl önce
  • Peki (CheckBox)DLRemindings.Controls[i] 'nde Controls[i] mi olmalı? i yerine başka bişe mi gelmeli? çünkü ifleri kaldırdığımda doğru çalıştı orada problem var NullReferenceException was caught diyo bu sefer de. paristanbulima 1 yıl önce
  • Birde çalışıyor musun sen? Çalışmıyorsan çalışmayı düşünür müsün? Bize biri lazım. Eğer istersen ve yakınsan ve düşünürsen bir görüşelim. paristanbulima 1 yıl önce
  • Yaptım. Ordaki i yerine i+1 yazdım oldu. Çok teşekkürler. paristanbulima 1 yıl önce
  • Tebrikler! Teklif için çok teşekkürler, çalışıyorum :) alattin 1 yıl önce
  • :) teşekkürler paristanbulima 1 yıl önce

üyelik gerektirir

Cevap yazabilmek için üye girişi yapmalısınız.

Eğer uzmanim.net üyesiyseniz giriş yapabilirsiniz: üye girişi yap
uzmanim.net'e üye olmak çok kolaydır: hemen kayıt ol