2010-02-28 5 views
1

J'ai rectifié mon problème précédent et maintenant en mesure d'insérer des données dans la table.
Maintenant, en lisant les données avec le nom, âge, sexe, ville, état TypeofDisease ne pas obtenir les result..as un résultat toujours que je reçois « System.Data.SqlClient.SqlDataReader » Voici ma procédure stockée:Lors de la lecture des données du problème de base de données

CREATE PROCEDURE SearchPatient 
(
@Name varchar(50), 
@Age int, 
@Gender varchar(50), 
@City varchar(50), 
@TypeofDisease varchar(50) 
) 
AS 
select * from Patient where [email protected] and [email protected] and [email protected] and [email protected] and [email protected] 
GO 

Et voici mon code d'événement:

protected void BtnSearch_Click(object sender, EventArgs e) 
    { 
     string name = TxtName.Text.Trim(); 
     int age = Convert.ToInt32(TxtAge.Text); 
     string gender; 
     if (RadioButtonMale.Checked) 
     { 
      gender = RadioButtonMale.Text; 
     } 
     else 
     { 
      gender = RadioButtonFemale.Text; 
     } 
     string city = DropDownListCity.SelectedItem.Value; 

     string typeofdisease = ""; 
     foreach (ListItem li in CheckBoxListDisease.Items) 
     { 
      if (li.Selected) 
      { 
       typeofdisease += li.Value; 
      } 
     } 
     string[] sl=typeofdisease.Split(); 
     foreach (string s in sl) 
     { 
      ListItem itm = CheckBoxListDisease.Items.FindByValue(s); 
      if (itm != null) 
      { 
       itm.Selected = true; 
      } 
     } 
     string ConString = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString; 
     SqlConnection con = new SqlConnection(ConString); 
     con.Open(); 
     SqlCommand com = new SqlCommand("SearchPatient", con); 
     com.CommandType = CommandType.StoredProcedure; 
     try 
     { 
      com.Parameters.Add("@Name", SqlDbType.VarChar, 50).Value = name; 
      com.Parameters.Add("@Age", SqlDbType.Int).Value = age; 
      com.Parameters.Add("@Gender", SqlDbType.VarChar, 50).Value = gender; 
      com.Parameters.Add("@City", SqlDbType.VarChar, 50).Value = city; 
      com.Parameters.Add("@TypeofDisease", SqlDbType.VarChar, 50).Value = sl.ToString(); 
      SqlDataReader dr; 
      dr = com.ExecuteReader(); 
      StringBuilder sb = new StringBuilder(); 
      sb.Append(dr); 
      lblPatientDetails.Text = sb.ToString();   
     } 
     catch 
     { 

      throw; 
     } 
     finally 
     { 
      con.Close(); 
      com.Dispose(); 
     } 
    } 

Pls quelqu'un modifier mon code, pour atteindre mon résultat attendu ..

Répondre

0

Vous devez utiliser des méthodes de dr, le SqlDataReader. Par exemple

  • dr.GetValue() (Pour obtenir une colonne donnée de la ligne en cours)
  • de dr.GetValues ​​() (Pour obtenir toutes les valeurs de ligne en cours)
  • dr.NextResult() (pour se rendre à la ligne suivante de données dans le resultset)

la raison pour laquelle vous continuez à obtenir « System.Data.SqlClient.SqlDataReader » au lieu d'un résultat est que l'attribution dr une chaîne (par voie de StringBuilder. Append) utilise, implicitement, la méthode ToString() de cet objet qui produit cette chaîne particulière (une fonction de déboguage utile, mais o par conséquent, pas très applicable).

0
dr = com.ExecuteReader(); 
StringBuilder sb = new StringBuilder(); 
sb.Append(dr); 
lblPatientDetails.Text = sb.ToString(); 

Modification:

using(SqlDataReader rdr = com.ExecuteReader()) 
{ 
    if(rdr.HasRows) 
    { 
     while(rdr.Read()) 
     { 
     sb.Append(rdr.GetString(0)); 
     ..... etc 
     } 
    } 
} 

Vous pouvez également créer DataSet.

using (SqlDataAdapter dataAdapter = new SqlDataAdapter(com)) 
    { 
     DataSet dataSet = new DataSet(); 
     dataAdapter.Fill(dataSet); 
     return dataSet; 
    } 
Questions connexes