2010-02-28 65 views
1

我已解決了我之前的問題,現在可以將數據插入表中。
現在,當閱讀數據與名稱,年齡,性別,城市,TypeofDisease條件沒有得到結果..總是我得到「System.Data.SqlClient.SqlDataReader」 這裏是我的存儲過程:從數據庫問題讀取數據時

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 

這裏是我的事件代碼:

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(); 
     } 
    } 

請別人修改我的代碼,以達到我預期的效果..

回答

0

您需要使用來自博士的方法,該SqlDataReader。例如

  • dr.GetValue()(若要從當前行指定列))
  • dr.GetValues((要想從當前行的所有值)
  • dr.NextResult()(以獲得結果集中的下一行數據)

爲什麼您不斷得到「System.Data.SqlClient.SqlDataReader」而不是某種結果的原因是將dr分配給字符串(通過StringBuilder的方式。 Append)隱式使用這個對象的ToString()方法,它產生這個特定的字符串(一個有用的調試功能,但o其實不太適用)。

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

更改爲:

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

,或者可以創建數據集。

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