Shi*_*V.M 1 c# asp.net idatareader
我想从数据库中读取数据到列表.
我尝试了以下代码
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;
}
}
Run Code Online (Sandbox Code Playgroud)
但问题是,当for循环开始时,阅读器会丢失数据.
数据读取器ResultView值为Enumeration,没有产生任何结果.
我的猜测是在执行循环期间发生了一些错误.这种技术......
try
{
...
}
catch(Exception ex)
{ }
Run Code Online (Sandbox Code Playgroud)
...确保忽略此错误,所有结果都是不完整的.正如您所注意到的,这使得调试非常困难.所以不要这样做.
因此,解决方案是:
try { ... } catch(Exception ex) {}为...),永远不要再写catch (Exception ex) {}了.;-)进行适当的错误处理,或者根本不进行错误处理.
| 归档时间: |
|
| 查看次数: |
681 次 |
| 最近记录: |