这是我的服务代码:
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 :(得分:0)
List.Add添加对象引用。在.NET中,引用类型是从不隐式复制。引用被复制。甚至没有复制对象的一般方法。
为每一行创建一个新对象。