无法使用IDataReader读取值

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,没有产生任何结果.

Hei*_*nzi 5

我的猜测是在执行循环期间发生了一些错误.这种技术......

try 
{ 
    ...
} 
catch(Exception ex) 
{ } 
Run Code Online (Sandbox Code Playgroud)

...确保忽略此错误,所有结果都是不完整的.正如您所注意到的,这使得调试非常困难.所以不要这样做.

因此,解决方案是:

  • 删除try-catch块(即替换try { ... } catch(Exception ex) {}...),
  • 再次运行代码,
  • 注意发生的错误,
  • 如果你理解错误
    • 修理它
  • 其他
    • 在一个新问题中再次询问StackOverflow.

永远不要再写catch (Exception ex) {}了.;-)进行适当的错误处理,或者根本不进行错误处理.