WCF SqlDataReader始终返回所有行的最后一行的次数

时间:2014-10-11 18:35:40

标签: sql sql-server wcf service 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总是返回最后一行,因为存储过程结果中有行。我无法找到问题所在......帮助!

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

1 个答案:

答案 0 :(得分:0)

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

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