Click here to Skip to main content
16,004,587 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Am trying to load textboxes according selected value and its giving me this error: "Invalid attempt to read when no data is present.". Please help

Code from my businessLayer
public ClsPatient getSpecificPatient(string patientIdNumber)
       {
           using (SqlConnection conn = new SqlConnection(ConnString))
           {
               SqlCommand cmd = new SqlCommand("procGetPatientByPatientID", conn);
               cmd.CommandType = CommandType.StoredProcedure;
               cmd.Parameters.Add(new SqlParameter("@patientIDNumber", SqlDbType.NVarChar));
               cmd.Parameters["@patientIDNumber"].Value = patientIdNumber;
               ClsPatient patient;
               try
               {
                   conn.Open();
                   SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow);

                   reader.Read();
                   patient = new ClsPatient(Convert.ToString(reader["PatName"]),
                                                           Convert.ToString(reader["PatSurname"]), Convert.ToString(reader["PatAddress"]),
                                                           Convert.ToString(reader["PatTell"]), Convert.ToString(reader["PatCell"]),
                                                           Convert.ToString(reader["PatWorkTell"]), Convert.ToString(reader["PatEmail"]),
                                                           Convert.ToString(reader["PatGender"]));
                   reader.Close();
               }
               catch (SqlException)
               {
                   throw new ApplicationException("Error reading deleted record from system files. Press ok and refresh button.");
               }
               return patient;
           }
       }

Code behind th dropdown
C#
protected void ddlPatientID_SelectedIndexChanged(object sender, EventArgs e)
   {
       //systemBusinessLayer=new BusinessLayer();
       ClsPatient patient = systemBusinessLayer.getSpecificPatient((string)ddlPatientID.SelectedValue);
       txtViewPatientName.Text = patient.PatName;
       txtViewPatientSurname.Text = patient.PatSurname;
       txtViewPatientPhonenumber.Text = patient.PatTell;
       txtViewPatientCellphone.Text = patient.PatCell;
       txtViewPatientWorkPhonenumber.Text = patient.PatWorkTell;
       txtViewPatientEmail.Text = patient.PatEmail;
       string gender = patient.PatGender;

       if (gender == "Female")
       {
           radFemale.Checked = true;
            radMale.Checked=false;

       }
       else if(gender=="Male")
       {
           radMale.Checked=true;
           radFemale.Checked = false;
       }

       txtViewPatientAddress.InnerText = patient.PatAddress;

   }


[edit]Code block - OriginalGriff[/edit]
Posted
Updated 17-Jun-11 21:22pm
v2
Comments
Christian Graus 18-Jun-11 3:06am    
It would sure help to know what line gives that error
Anele Ngqandu 18-Jun-11 3:15am    
patient = new ClsPatient(Convert.ToString(reader["PatName"]),
Convert.ToString(reader["PatSurname"]), Convert.ToString(reader["PatAddress"]),
Convert.ToString(reader["PatTell"]), Convert.ToString(reader["PatCell"]),
Convert.ToString(reader["PatWorkTell"]), Convert.ToString(reader["PatEmail"]),
Convert.ToString(reader["PatGender"]));

Data reading problem with SqlDataReader.
Check this link below:
<a href="http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/076fdaa2-6a17-4ce7-87bf-0d9340cfc61e/">Link</a>
 
Share this answer
 
I suspect that the stored procedure is not returning any rows: Try checking your Read method return value:
if (reader.Read())
   {
   patient = new ClsPatient(Convert.ToString(reader["PatName"]),
                                        Convert.ToString(reader["PatSurname"]), Convert.ToString(reader["PatAddress"]),
                                        Convert.ToString(reader["PatTell"]), Convert.ToString(reader["PatCell"]),
                                        Convert.ToString(reader["PatWorkTell"]), Convert.ToString(reader["PatEmail"]),
                                        Convert.ToString(reader["PatGender"]));
   }
reader.Close();
 
Share this answer
 
Comments
Monjurul Habib 18-Jun-11 3:44am    
good call, my 5.
Anele Ngqandu 18-Jun-11 4:32am    
no the "return patient whont be seen...

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900