SqlDataReader [i]数据类型

问题描述:

我想从一组行查询行中读取数据,并将每个记录放入对象列表中的一个对象中,但我不知道单个记录的数据类型是什么在SqlDataReader中。SqlDataReader [i]数据类型

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

你试过检查您的直接窗口读者[I] .GetType()? – user15741

reader[i]是当前记录的第i个字段的索引。的。例如,如果查询是

SELECT ID, FNAME, LNAME, ADDRESS FROM CUSTOMERS 

那么你的回路试图传递到您的功能字段ID在第一循环中,字段FNAME的第一个记录的(I = 0)(I = 1)第二个循环中的第二个记录,第三个循环中第三个记录的字段LNAME(i = 2),然后是第四个记录的字段ADDRESS(i = 3),最后(如果有超过四个记录被检索到)代码崩溃,超出范围异常(i = 4,但列仅为4)

您需要构建一个对象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() 
     }; 
} 
+0

我期待着大量的行和15列的响应。 'reader'是行数组,然后'reader [0]'通过'reader [14]'是字段吗? – Shmoopy

+0

是的,对于字段而言,但读者只包含一条记录,您需要调用Read()方法将其移至下一条记录。 – Steve

+0

好的,我只是看着它,然后。谢谢! – Shmoopy

首先改变你的阅读条件,其次,你可以保存数据创建一个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 

    } 
+0

看着史蒂夫的答案,设置响应的属性匹配您的每个字段,是一个更好的方法.. – apomene