如何使用数据集中的值填充集合

时间:2013-01-28 15:59:47

标签: c# .net datatable dataset

这是一个新手问题,我正在尝试在C#中构建一个用于为用户设置UserOrgs属性的类(每个用户可以有多于1个)

到目前为止我有这个:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;

/// <summary>
/// Summary description for clsRepUser
/// </summary>
public class clsUser
{
    private string userid;
    private List<string> userorgs;

    public string UserID
    {
        get
        {
            return userid;
        }
        set
        {
            userid = value;
        }
    }

    public List<string> UserOrgs
    {
        get
        {
            return userorgs;
        }
        set
        {
            userorgs = value;
        }
    }

    clsConn cCon = new clsConn();
    String connStr = "";
    public clsUser()
    {

    }

    public DataSet GetUserOrg(string UserID)
    {
        DataSet ds = new DataSet();
        SqlConnection conn = new SqlConnection(cCon.getConn());

        SqlCommand cmd = new SqlCommand("sp_getUserOrgs", conn);

        // 2. set the command object so it knows
        // to execute a stored procedure
        cmd.CommandType = CommandType.StoredProcedure;

        // 3. add parameter to command, which
        // will be passed to the stored procedure
        cmd.Parameters.Add(
            new SqlParameter("@UserID", UserID));

        try 
        {
            // Open the connection and execute the Command
            conn.Open();
            SqlDataAdapter sqlDA = new SqlDataAdapter();

            sqlDA.SelectCommand = cmd;
            sqlDA.Fill(ds);
        } 
        catch (Exception ex) 
        {
        } 
        finally 
        {
            conn.Close();
        }

        return ds;    
    }
}

如何从UserOrgs函数填充该用户的GetUserOrg属性?或者我离开了吗?

4 个答案:

答案 0 :(得分:0)

我会使用一个orm,linqtosql很容易为新手。如果你坚持使用数据表和数据加载器

您需要遍历返回的结果并将返回值填充到对象中。

This is a pretty good primer to start of with.

答案 1 :(得分:0)

我认为有三种方式:

  1. 您可以使用通用Lazy<>
  2. 将属性替换为方法GetUserOrganizations()。它更清楚。如果你想获得“新鲜”的组织。
  3. 将获取逻辑移至另一层(BI,DAL)。然后用户类型就像数据合同。

答案 2 :(得分:0)

您正在使用存储过程,因此很难为您提供确切的代码,但我们的想法是遍历DataSet的所有行,并使用.Add()方法将该行的元素添加到列表中。像这样:

foreach (DataRow dr in ds.Tables[0].Rows) {  
  userorgs.Add(dr["orgs_column"].ToString()); 
}

答案 3 :(得分:0)

您可以尝试使用此代码 - 基于DataSet.Tables[0].Rows

using(var conn = new SqlConnection(cCon.getConn())
{
        using(var cmd = new SqlCommand("sp_getUserOrgs", conn))
        {
           cmd.CommandType = CommandType.StoredProcedure;
           cmd.Parameters.Add(new SqlParameter("@UserID", UserID));

          try 
          {
            conn.Open();
            SqlDataAdapter sqlDA = new SqlDataAdapter();

            sqlDA.SelectCommand = cmd;
            sqlDA.Fill(ds);

            foreach (DataRow dr in ds.Tables[0].Rows) 
            {  
               userorgs.Add(dr["orgs_column"].ToString()); 
            }
          } 
          catch (Exception ex) 
          {
            //treat your exception
          } 
      }       
  }