【问题标题】:Retrieve Datareader using Objects使用对象检索 Datareader
【发布时间】:2014-04-29 12:51:11
【问题描述】:

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

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

【问题讨论】:

    标签: c# ado.net sqldatareader cubes adomd.net


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        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;
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-11-12
          • 1970-01-01
          • 1970-01-01
          • 2015-12-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多