从.net中的DataReader转换为List

Rob*_*obz 3 c# asp.net list sqldatareader

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

string cmdString = "select tblPackages.*, tblPackageTypes.Name from tblPackages join tblPackageTypes on tblPackages.TypeId = tblPackageTypes.Id";
Run Code Online (Sandbox Code Playgroud)

现在我使用这个SQL命令并返回像这样的datareader:

SqlCommand cmd = new SqlCommand(cmdString,con);
SqlDataReader dr;
Run Code Online (Sandbox Code Playgroud)

我想将数据读取器的值填充到列表中.我提到了这个链接,但我得不到我需要的东西.

我有从sql输出的以下列

Id, TypeId, AllowedSMS, TimeSpan, Price, TypeName. 
Run Code Online (Sandbox Code Playgroud)

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

mar*_*c_s 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; } 
}
Run Code Online (Sandbox Code Playgroud)

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

现在,您需要迭代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....
Run Code Online (Sandbox Code Playgroud)