【问题标题】:Convert to List from DataReader in .net从 .net 中的 DataReader 转换为列表
【发布时间】:2014-01-03 06:43:17
【问题描述】:

我有一个这样的连接查询:

string cmdString = "select tblPackages.*, tblPackageTypes.Name from tblPackages join tblPackageTypes on tblPackages.TypeId = tblPackageTypes.Id";

现在我使用这个 SQL 命令并得到一个像这样的数据读取器:

SqlCommand cmd = new SqlCommand(cmdString,con);
SqlDataReader dr;

我想将数据读取器的值填充到列表中。我提到了这个link,但我没有得到我需要的东西。

我有从 sql 输出的以下列

Id, TypeId, AllowedSMS, TimeSpan, Price, TypeName. 

我只想在列表中传递它们。请帮助我.. 我是 asp.net 的新手

【问题讨论】:

  • "但我没有得到我需要的东西" => 你尝试过什么,实际得到了什么?
  • @Koen 列表是 int 但我需要所有列的列表
  • 然后你必须创建一个类来保存你需要的列的值。

标签: c# asp.net list sqldatareader


【解决方案1】:

嗯,在你的情况下,你需要一个可以容纳你的列的

public class MyClass
{
   public int Id { get; set; }
   public int TypeId { get; set; }
   public bool AllowedSMS { get; set; }
   public string TimeSpan { get; set; }  
   public decimal Price { get; set; }
   public string TypeName { get; set; } 
}

当然,由于您没有定义这些列的数据类型,这只是一个猜测 - 您可能需要适应您的具体需求。

现在,您需要遍历 SqlDataReader 并从数据读取器中获取值并填充新创建的类:

using (SqlDataReader dr = cmd.ExecuteReader())
{
   List<MyClass> results = new List<MyClass>();

   while(dr.Read())
   {
       MyClass newItem = new MyClass();

       newItem.Id = dr.GetInt32(0);  
       newItem.TypeId = dr.GetInt32(1);  
       newItem.AllowedSMS = dr.GetBoolean(2);  
       newItem.TimeSpan = dr.GetString(3);
       newItem.Price = dr.GetDecimal(4);
       newItem.TypeName = dr.GetString(5);

       results.Add(newItem);
   }
}

// return the results here, or bind them to a gridview or something....

【讨论】:

  • 你可以使用 Object Initializer 来美化这个 - newItem ;)
  • 有没有办法(可能使用 Linq?)选择或转换 SqlDataReader drList&lt;MyClass&gt;,而不是用 dr.Read() 交互每条记录?类似于 Lambda .Select(a =&gt; new MyClass(){ Id = a.Id, TypeId = a.TypeId }) 等?
猜你喜欢
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 2020-12-02
  • 2022-07-20
  • 2011-04-01
相关资源
最近更新 更多