日期:2014-05-17  浏览次数:20538 次

求助SqlDataReader 相关出现的问题
本帖最后由 cuiweiqiang 于 2013-04-01 16:01:36 编辑
源代码如下:

SqlConnection connection = new SqlConnection();
SqlConnection connectionDetail = new SqlConnection();

connection.ConnectionString = connectionString;
connection.Open();

connectionDetail.ConnectionString = connectionString;
connectionDetail.Open();

SqlCommand command = connection.CreateCommand();
SqlCommand commandDetail = connectionDetail.CreateCommand();

command.CommandText = "SELECT   ID, NAME, NUMBER, DEPARTMENT, AREA FROM W_TELEPHONE WHERE (DEPARTMENT LIKE \'%" + key + "%\')";
commandDetail.CommandText = "SELECT TOP 10 ID, NAME, NUMBER, DEPARTMENT, AREA FROM W_TELEPHONE WHERE (NAME LIKE \'%" + key + "%\')";

SqlDataReader data = command.ExecuteReader();
SqlDataReader dataDetail = commandDetail.ExecuteReader();

List<Phone> phones = new List<Phone>();
if (data.Read())
{
    while (data.Read())
     {
         Phone phonetemp = new Phone();
         phonetemp.name = (string)data[1];
         phonetemp.number = (string)data[2];
         phonetemp.department = (string)data[3];
         phonetemp.area = (string)data[4];

         phones.Add(phonetemp);
      }
}
else if (dataDetail.Read())
{
     while (dataDetail.Read())
     {
         Phone phonetemp = new Phone();
         phonetemp.name = (string)data[1];
         phonetemp.number = (string)data[2];
         phonetemp.department = (string)data[3];
         phonetemp.area = (string)data[4];

          phones.Add(phonetemp);
       }
}
else
{
    phones = null;
}

connection.Close();
connectionDetail.Close();
return phones;


      这个其实想实现的功能就是,如果在DEPARTMENT列匹配不到关键字就去NAME列匹配。
      现在的问题是如果在DEPARTMENT列能找到关键字,phones就不是空的。但是在DEPARTMENT找不到关键字的时候,phones确是空的,跟踪调试了一下,能进入else if (dataDetail.Read()),但是在while(dataDetail.Read())这一句就跳走了。而在NAME列其实是能找到相关的数据的。
      求大神帮助一下!
SqlDataReader?

------解决方案--------------------
else if (dataDetail.Read())     //读第一条记录 
{               
  while (dataDetail.Read())