【发布时间】:2011-11-24 11:34:31
【问题描述】:
我想从数据库中读取数据到列表中。
我尝试了以下代码
public List<T> StoredProcedureForIList<T>(string spName, params IDataParameter[] commandParameters)
{
List<T> list = new List<T>();
T item;
Type listItemType = typeof(T);
item = (T)Activator.CreateInstance(listItemType);
list.Add(item);
using (IDatabaseConnection connection = new DatabaseConnection())
{
IDbCommand cmd = connection.CreateCommandForStoredProcedure(spName);
foreach (SqlParameter par in commandParameters)
{
cmd.Parameters.Add(par);
}
try
{
using (IDataReader reader = cmd.ExecuteReader())
{
while (reader != null && reader.Read())
{
for (int i = 0; i < reader.FieldCount; i++)
{
var prop = listItemType.GetProperty(reader.GetName(i));
prop.SetValue(item, reader[i], null);
}
list.Add(item);
}
}
}
catch(Exception ex)
{ }
return list;
}
}
但问题是,当 for 循环启动时,读取器会丢失数据。
数据读取器 ResultView 的值为 Enumeration 没有结果。
【问题讨论】:
-
dr来自哪里(如dr.FieldCount)? -
哦,对不起,它不是 dr.FieldCount 博士...问题已编辑..
-
更明确地说“读者丢失数据”是什么意思。另外,我怀疑你可以替换 'T item;类型 listItemType = typeof(T); item = (T)Activator.CreateInstance(listItemType);' with 'T item = default(T);'
-
你为什么要吞下异常?那是……真是个坏主意。系统可能正在非常努力告诉你哪里出了问题,而你只是把它扔掉了。
标签: c# asp.net idatareader