使用对象检索数据读取器



我一直致力于使用Datareader从SQL数据库中检索数据并将其填充到Datatable中。但是,我想知道是否有任何方法可以在不使用数据表的情况下处理来自数据阅读器的数据? 我的意思是 - 使用对象处理表值应该更可取。

但是,我不想在这里使用 LINQ,因为我将使用 ADOMD 对象从数据库(多维数据集)中提取数据。

看看 dapper-dot-net。我不确定它如何与 ADOMD.NET 一起工作,但它确实巧妙地具体化了动态对象中的查询结果。

只需循环遍历项并将其设置为自定义类的属性值即可。下面的示例从"客户"表中读取数据并创建"客户类列表"对象。假设您有一个客户 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);
             }
           }
        }
    }
}

public List GetEmployee(string 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;
    }

最新更新