我正在使用一个对象列表类型,它从datareader读取数据并添加到列表中。 以下是相同的代码:
public static List<object[]> LoadRecordsFromDataReaderToList(SqlDataReader reader, int dataLimit)
{
List<object[]> dataList = new List<object[]>();
while (reader.Read())
{
object[] columnName = new object[reader.FieldCount];
for (int i = 0; i < reader.FieldCount; i++)
{
columnName[i] = reader.GetName(i);
}
dataList = new List<object[]>{columnName};
object[] tempRow = new object[reader.FieldCount];
for (int i = 0; i < reader.FieldCount; i++)
{
tempRow[i] = reader[i];
}
dataList.Add(tempRow);
}
return dataList;
}
正如您在上面的代码中看到的,首先运行一个for循环以获取所有列并在列表中分配如下图像。 List with column name image
然后运行一个循环来获取值并尝试分配相同的列名但在添加tempRow列表后显示两个项目计数,第一个项目包含所有列名称,第二个项目包含所有值。 下面是为所有值添加的图像。 List with added values
如何为列表中的特定列索引分配值? 如果您有任何疑虑,请与我们联系。
答案 0 :(得分:0)
似乎您想要将列名称添加为&#34;标题&#34;曾经并不总是在while循环中。 您总是在记录循环中覆盖整个列表:
dataList = new List<object[]>{columnName};
我认为你可以使用这种方法:
public static List<object[]> LoadRecordsFromDataReaderToList(SqlDataReader reader)
{
List<object[]> dataList = new List<object[]>();
if (reader.HasRows)
{
// add header first and just once
string[] columns = Enumerable.Range(0, reader.FieldCount)
.Select(reader.GetName)
.ToArray();
dataList.Add(columns);
}
while (reader.Read())
{
// add data records
object[] tempRow = new object[reader.FieldCount];
for (int i = 0; i < reader.FieldCount; i++)
{
tempRow[i] = reader[i];
}
dataList.Add(tempRow);
}
return dataList;
}