我正在尝试逐行读取set查询中的数据并将每个记录放在对象列表中的对象中,但我不知道SqlDataReader中单个记录的数据类型是什么。
List<Response> responseList = new List<Response>();
for (int i = 0; reader.Read(); i++) //reader is the SqlDataReader
responseList.Add(new Response(reader[i]));
我将Response
构造函数的参数设置为什么数据类型?
public Response(IDataRecord r) //what's the data type suppose to be?
{
}
答案 0 :(得分:2)
reader[i]
是当前记录的第i个字段的索引。例如,如果您的查询是
SELECT ID, FNAME, LNAME, ADDRESS FROM CUSTOMERS
然后你的循环尝试将第一个循环中第一个记录的字段ID(i = 0)传递给你的函数,第二个循环中第二个记录的字段FNAME(i = 1),字段LNAME( i = 2)第三个循环中的第三个记录,然后是第四个记录的字段ADDRESS(i = 3),最后(如果检索的记录超过四个),代码崩溃超出范围异常(i = 4但是列只是4)
您需要构建一个对象Response
,然后在将其添加到列表之前填充其属性
因此,仍然假设您的对象Response有四个名为ID, FirstName, LastName, Address
的属性,那么您可以编写
List<Response> responseList = new List<Response>();
while(reader.Read())
{
responseList.Add(new Response()
{
ID = reader[0].ToString(),
FirstName = reader[1].ToString(),
LastName = reader[2].ToString(),
Address = reader[3].ToString()
};
}
答案 1 :(得分:1)
首先更改您的阅读条件,然后您可以创建List <string>
来保存数据。
List<string> responseList = new List<string>();
While (reader.Read())
{
responseList.Add(reader[i]).ToString());
}
考虑到现在,如果您希望单独保存每个字段,所有字段都保存在同一个列表(响应列表)中:(假设您在SQL查询中选择了3个字段)
List<string> List1 = new List<string>();
List<string> List2 = new List<string>();
List<string> List3 = new List<string>();
While (reader.Read())
{
List1.Add(reader[0]).ToString());///1st field of select
List2.Add(reader[1]).ToString());///2nd field of select
List3.Add(reader[2]).ToString());///3rd field of select
}