2014-10-11 56 views
0

这里是我的服务代码:WCF SqlDataReader的总是返回最后一行次数的所有行的

public List<Person> GetPersons() 
     { 
      string connstr = "Data Source=XXXXXX-PC;Initial Catalog=Database;Integrated Security=True"; 

      using (SqlConnection con = new SqlConnection(connstr)) 
      { 
       SqlCommand cmd = new SqlCommand("GetPersons", con); 
       cmd.CommandType = CommandType.StoredProcedure; 

       con.Open(); 
       SqlDataReader data = cmd.ExecuteReader(); 
       List<Person> persons = new List<Person>(); 
       Person one = new Person(); 

       if (data.HasRows) 
       { 
        while(data.Read()) 
        { 
         one.id = data.GetInt32(data.GetOrdinal("ID")); 
         one.name = data.GetString(data.GetOrdinal("Name")); 
         one.surname = data.GetString(data.GetOrdinal("Surname")); 
         one.fathername = data.GetString(data.GetOrdinal("FatherName")); 
         persons.Add(one); 
        } 
        data.Close(); 
       } 
       return persons; 
      } 
     } 

这里是SQL Server存储过程:

SELECT 
    tbtp.ID, tbo.Name, tbo.Surname, ISNULL(tbo.FatherName,'unknown') FatherName 
FROM 
    tbTechCh tbtp 
JOIN 
    tbPersons tbo ON tbtp.PersonsID = tbo.ID 
WHERE 
    tbtp.DateCh IS NULL 
ORDER BY 
    tbo.Surname 

SqlDataReader总是返回最后一个因为存储过程结果中有行,所以行数很多。我无法找到问题所在......帮助!

编辑:存储过程按预期返回数据,但此问题只出现在服务中。

+0

你调试过程序了吗?当你单步通过它会发生什么? – usr 2014-10-11 20:30:08

+0

我不能单步异步调用,我需要这些,因为这是来自WP 8.1应用程序的一部分。 – 2014-10-11 20:50:34

+0

在此方法中设置断点并逐步完成。 – usr 2014-10-11 20:52:40

回答

0

List.Add添加一个对象引用。在.NET引用类型中,从不隐式复制。引用被复制。甚至没有通用的方法来复制对象。

为每一行创建一个新对象。

相关问题