如何添加列表
问题描述:
我不知道我在做什么错误,当我从我的数据库中添加值到list<object>
它总是返回列表与对象的总数,但所有的值是在循环while
中创建的最后一条记录。如何添加列表<object>与NpgsqlDataReader()C#
这是我的代码:
public List<object> getdata(string storedProcedure)
{
List<object> list = new List<object>();
try
{
using (var conn = new NpgsqlConnection(connstring))
{
conn.Open();
NpgsqlTransaction tran = conn.BeginTransaction();
NpgsqlDataReader reader;
var cmd = new NpgsqlCommand(storedProcedure, conn);
cmd.CommandType = CommandType.StoredProcedure;
reader = cmd.ExecuteReader();
int fieldCount = reader.FieldCount;
object[] fieldValues = new object[fieldCount];
while (reader.Read())
{
int instances = reader.GetValues(fieldValues);
for (int fieldCounter = 0; fieldCounter < fieldCount; fieldCounter++)
{
if (Convert.IsDBNull(fieldValues[fieldCounter]))
fieldValues[fieldCounter] = "NA";
}
list.Add(fieldValues);
}
reader.Close();
tran.Commit();
conn.Close();
return list;
}
}
catch (Exception ex)
{
}
return list;
}
答
您需要将里面的对象数组的声明和初始化循环
....
while (reader.Read())
{
object[] fieldValues = new object[fieldCount];
....
}
您遇到的问题是由以下事实引起的:当您初始化阵列外部循环并在数据读取器的每个循环中重新使用它,可以用前一个内容替换当前记录的内容。
但是,当您将数组添加到对象列表时,您将只对内容进行更改的初始数组添加相同的引用。显然,当你到达最后一个记录时,只有一个数组,而列表中包含对同一个内存区域的n引用。所以你显示n次相同的最后一个记录。
在循环内移动初始化为每个循环提供一个新的引用,并且每个引用保持循环期间接收到的记录的数据。
我记录了MSDN,初始化循环外的数组,但他们错了,你帮了我很多。谢谢 –