2010-02-28 60 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; 
    }