0

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

到目前为止,我有这个:

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

4 回答 4

0

我会使用 orm,linqtosql 对新手来说很容易。如果您坚持使用数据表和数据读取器

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

这是一个很好的入门入门。

于 2013-01-28T16:04:41.913 回答
0

我认为有3种方式:

  1. 您可以使用泛型Lazy<>
  2. 将属性替换为方法GetUserOrganizations()。它更清楚。如果你想获得“新鲜”的组织。
  3. 将获取逻辑移至另一层(BI、DAL)。那么用户类型就像数据合约。
于 2013-01-28T16:09:39.320 回答
0

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

foreach (DataRow dr in ds.Tables[0].Rows) {  
  userorgs.Add(dr["orgs_column"].ToString()); 
}
于 2013-01-28T16:16:27.587 回答
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
          } 
      }       
  }
于 2013-01-28T16:39:11.053 回答