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?
{
}
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()
};
}
首先改变你的阅读条件,其次,你可以保存数据创建一个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
}
看着史蒂夫的答案,设置响应的属性匹配您的每个字段,是一个更好的方法.. – apomene
你试过检查您的直接窗口读者[I] .GetType()? – user15741