Çözüldü C# Access "geçerli sütun veya satır da veri yok" hatası

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

ArticWolf

Hectopat
Katılım
9 Aralık 2020
Mesajlar
738
Çözümler
5
C# da Access ile veri çekmeye çalışınca sütun veya satır da bilgi yok diyor. Oysaki girili studentno'yu çektiğimde alıyor ama böyle çekince boş hatası veriyor.

Not: studentno integer türünde bir değişken.

C#:
 OleDbConnection con = new OleDbConnection();
 con.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0;" + @"Data Source = " + Application.StartupPath + "\\databases\\students.accdb;";
 con.Open();
 string sql = "SELECT * FROM Student Where StudentNo = @no";
 OleDbCommand cmd;
 cmd = new OleDbCommand(sql, con);
 cmd.Parameters.AddWithValue("@no", no.SelectedText);
 OleDbDataReader rdr = cmd.ExecuteReader();
 stuname.Text += (string)rdr["StudentName"];
 
Çözüm
Hocam o zaman student no sonuç döndürüyor ama parametrelerdeki bir hata sebebi ile satır ve sütun veriler okunamıyor demek yani sorun aslında OleDbDataReader nesnesinden kaynaklı olma ihtimali yüksek rdr.read metodu ile okumayı deneyelim ki kontrol sonrası boolen bir değer alalım.
C#:
if (rdr.Read()) { stuname.Text += (string)rdr[“StudentName”]; }

Bu kod ile rdr nesnesinin veri içerdiğinden emin olabiliriz şuan tek mantıklı olan bu gibi geliyor bana.
Hocam;
Veri çekmeye çalıştığınızda boş hatası almanızın nedeni, no. SelectedText özelliğinin beklediğiniz değeri döndürmemesi olabilir. Bu özellik, genel olarak seçili metni almak için kullanılır, ancak eğer hiçbir metin seçili değilse boş bir string döndürür. Bu durumda, sorgunuzda @no parametresi boş bir değer alır ve veritabanında böyle bir StudentNo olmadığı için sonuç döndürmez.

Bunu çözmek çok sıkıntı değil hocam ama dediklerimi dikkatli uygularsanız bence çözülebilir:
no. SelectedText yerine no. Text kullanmayı deneyin. Bu özellik, seçili metin olsun ya da olmasın, kontrolün içindeki tüm metni alır. Ayrıca, parametreleri eklerken AddWithValue yerine Add metodunu kullanmanızı tavsiye ederim. Çünkü AddWithValue metodu, parametre tipini otomatik olarak belirler ve bazen beklenmedik yani anlaşılması garip olan sonuçlara neden olabilir tabii bence beklenmedik size normal gelebilir. Örneğin, şöyle yazabilirsiniz:

CMD. Parameters. Add(“@no”, OleDbType. Integer).Value = int. Parse(no. Text);

Bu şekilde parametrenin tipini ve değerini açıkça belirtmiş olursunuz.

Bir deneyin hocam olmaz ise beni etiketleyin tekrar bakalım.

İyi Sosyaller ve çalışmalar dilerim...
 
Hocam;
Veri çekmeye çalıştığınızda boş hatası almanızın nedeni, no. Selectedtext özelliğinin beklediğiniz değeri döndürmemesi olabilir. Bu özellik, genel olarak seçili metni almak için kullanılır, ancak eğer hiçbir metin seçili değilse boş bir string döndürür. Bu durumda, sorgunuzda @no parametresi boş bir değer alır ve veritabanında böyle bir studentno olmadığı için sonuç döndürmez.

Bunu çözmek çok sıkıntı değil hocam ama dediklerimi dikkatli uygularsanız bence çözülebilir:
no. Selectedtext yerine no. Text kullanmayı deneyin. Bu özellik, seçili metin olsun ya da olmasın, kontrolün içindeki tüm metni alır. Ayrıca, parametreleri eklerken addwithvalue yerine add metodunu kullanmanızı tavsiye ederim. Çünkü addwithvalue metodu, parametre tipini otomatik olarak belirler ve bazen beklenmedik yani anlaşılması garip olan sonuçlara neden olabilir tabii bence beklenmedik size normal gelebilir. Örneğin, şöyle yazabilirsiniz:

CMD. Parameters. Add(“@no”, oledbtype. Integer).Value = int. Parse(no. Text);

Bu şekilde parametrenin tipini ve değerini açıkça belirtmiş olursunuz.

Bir deneyin hocam olmaz ise beni etiketleyin tekrar bakalım.

İyi sosyaller ve çalışmalar dilerim...

Kod:
'Satır/sütun için hiç veri yok.'

Hocam veri tababımda var gözüküyor studentno yu zaten veri tabanından çekiyor.
Veri tabanımında böyle gözüküyor.

1683648618485.png
 
Hocam o zaman student no sonuç döndürüyor ama parametrelerdeki bir hata sebebi ile satır ve sütun veriler okunamıyor demek yani sorun aslında OleDbDataReader nesnesinden kaynaklı olma ihtimali yüksek rdr.read metodu ile okumayı deneyelim ki kontrol sonrası boolen bir değer alalım.
C#:
if (rdr.Read()) { stuname.Text += (string)rdr[“StudentName”]; }

Bu kod ile rdr nesnesinin veri içerdiğinden emin olabiliriz şuan tek mantıklı olan bu gibi geliyor bana.
 
Çözüm
Hocam o zaman student no sonuç döndürüyor ama parametrelerdeki bir hata sebebi ile satır ve sütun veriler okunamıyor demek yani sorun aslında oledbdatareader nesnesinden kaynaklı olma ihtimali yüksek RDR. Read metodu ile okumayı deneyelim ki kontrol sonrası boolen bir değer alalım.
C#:
if (rdr.Read()) { stuname.Text += (string)rdr[“StudentName”]; }

Bu kod ile RDR nesnesinin veri içerdiğinden emin olabiliriz şu an tek mantıklı olan bu gibi geliyor bana.

Hocam çok sağ olun çalıştı.
 

Geri
Yukarı