Konuyu görüntüle
IUCODERS FORUM > Programlama > .NET > invalid attempt to read...
Yazar
brkygt


avatar

Kayıt: 29.06.2010
02.09.2012-16:54 #78394
GetPhoneCount isimli bir stored procedure var elimde. İki parametresi var, @id input ve @phone_count output şeklinde. id'si girilen kişinin kaç telefon kaydı olduğunu listeliyor. Yalnız aşağıdaki kodda datareader ile okumaya kalktığımda başlıktaki hatayı veriyor. Halbuki sql tarafında bu stored procedure çalışıyor. Sorunu bulamadım.

SqlConnection cnn = new SqlConnection(cnnStr);
cnn.Open();

SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "GetPhoneCount";
cmd.Connection = cnn;

SqlParameter prm = new SqlParameter("@id", SqlDbType.Int, 2);
prm.Value = 2; //id'si 2 olan kişinin kaç telefon kaydı var
cmd.Parameters.Add(prm);



prm = new SqlParameter("@phone_count", SqlDbType.Int, 2);
prm.Value = 0;
cmd.Parameters.Add(prm);

SqlDataReader dr = cmd.ExecuteReader();
if(dr.Read())
MessageBox.Show(dr.GetInt32(0).ToString());





Yazar
sis***


avatar

Kayıt: 15.01.2006
02.09.2012-20:17 #78396
if(dr.Read()) // okuma yapmaz

yerine

while(dr.Read()) // sorgu sonucu satir sayisi kadar okuma yapar

veya

dr.Read() // bir kere okuma yapar, sadece 1 satir oldugundan eminsek (mutlaka bir kayit dondurmeli yoksa exceptiona duser)





University Of Minnesota- Minnesota(ABD)




Yazar
brkygt


avatar

Kayıt: 29.06.2010
02.09.2012-23:46 #78397
Stored procedure sonucuna göre sadece id'si girilen kisinin tablodaki kayıt sayısını gösteriyor. Yani tek bir sonuç var.





Yazar
sis***


avatar

Kayıt: 15.01.2006
03.09.2012-11:42 #78398
Kafanın karışmaması için en sağlıklı yol ve kullanılan while döngüsüdür. Eğer sorgu sonucu kayıt döndürür ise her bir kaydı tek tek okur. Yani herbir döngü adımında bir kayıt satırı(row) ulaşılabilir.


SqlDataReader dr = cmd.ExecuteReader();

while(dr.Read())
{
MessageBox.Show(dr.GetInt32(0).ToString());
}





University Of Minnesota- Minnesota(ABD)




Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb