从.net中的DataReader转换为List

时间:2014-01-03 06:43:17

标签: c# asp.net list sqldatareader

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

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的新手

1 个答案:

答案 0 :(得分:10)

嗯,在您的情况下,您需要一个可以保存列的

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....