2012-08-16 21 views
0

我一直在使用Datareader從SQL數據庫中檢索數據並將其填充到數據表中。但是,我想知道是否有任何方法可以在不使用數據表的情況下處理來自數據讀取器的數據?我均值使用對象應該是更理想的處理表中的值..使用對象檢索數據讀取器

但是,我不想在這裏,因爲,我將使用ADOMD對象從數據庫(立方體)提取數據使用LINQ。 。

回答

1

看一看dapper-dot-net。我不確定它如何與ADOMD.NET一起工作,但它確實將動態對象中的查詢結果具體化。

1

只需循環通過項目,並將其設置爲您的自定義類的屬性值。以下示例從Customer表中讀取數據並創建Customer Class對象列表。假設你有一個客戶POCO有ID,名稱和屬性

List<Customer> custList= new List<Customer>(); 
string connString="yourConnectionStringHere"; 
using (var conn = new SqlConnection(connString)) 
{ 
    conn.Open(); 
    using (SqlCommand cmd = new SqlCommand()) 
    { 
     cmd.Connection = conn; 
     cmd.CommandType = CommandType.Text; 
     cmd.CommandText = "SELECT ID,NAME From Customer";   

     using (var reader = cmd.ExecuteReader()) 
     { 
      if (reader.HasRows) 
      { 
      while (reader.Read()) 
      { 
       var cust= new Customer(); 

        if (!reader.IsDBNull(reader.GetOrdinal("ID"))) 
         cust.ID = reader.GetInt32(reader.GetOrdinal("ID")); 

        if (!reader.IsDBNull(reader.GetOrdinal("Name"))) 
         cust.Name = reader.GetString(reader.GetOrdinal("Name")); 

        custList.Add(cust); 
      } 
      } 
     } 
    } 
} 
0

公開名單getEmployee的(字符串spname) {

 con.Open(); 
     cmd = new SqlCommand(); 
     cmd.Connection = con; 
     cmd.CommandText = spname; 
     cmd.CommandType = CommandType.StoredProcedure; 
     reader = cmd.ExecuteReader(); 
     List<EmployeeDetails> lstemp = new List<EmployeeDetails>(); 
     while (reader.Read()) 
     { 
      EmployeeDetails emp = new EmployeeDetails(); 
      emp.EmployeeId =Convert.ToInt32(reader["EmployeeId"].ToString()); 
      emp.FirstName = reader["FirstName"].ToString(); 
      emp.LastName = reader["LastName"].ToString(); 
      emp.DOB = Convert.ToDateTime(reader["DOB"].ToString()); 
      emp.Gender = Convert.ToInt32(reader["Gender"].ToString()); 
      emp.QName = reader["QName"].ToString(); 
      emp.Dname = reader["DName"].ToString(); 
      emp.Email = reader["Email"].ToString(); 



      lstemp.Add(emp); 

     } 


     return lstemp; 
    }