SqlDataReader [i]数据类型

时间:2014-02-07 19:41:13

标签: c# types sqldatareader

我正在尝试逐行读取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?
{

}

2 个答案:

答案 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

    }