2010-08-20 5 views
1

DB에 SQL 테이블 "Roles"가 있습니다. 사용자가 하나 이상의 역할 (관리자/사용자)을 가지고 있는지 알아보고 사용자가 시간대에 2 개의 역할을 가지고 있다면 값으로 무엇인가를하고 싶습니다.C# SQL 데이터베이스 - 테이블에서 모든 특정 행을 읽는 방법?

문제점 : 데이터베이스에서 모든 값을 가져올 수 없습니다.

foreach 루프로 할 수 있습니까? 나는 그것을 가지고 있지 않지만 해결책을 찾고있다. 같은

:

  cmd = new SqlCommand(); 
      cmd.Connection = connection; 
      cmd.CommandType = System.Data.CommandType.Text; 
      cmd.CommandText = @"SELECT Role " 
            + " FROM UsersRole " 
            + " WHERE UserName = @UserName "; 
      cmd.Parameters.Add(new SqlParameter("@UserName", username)); 

      reader = cmd.ExecuteReader(); 

      if (reader.HasRows) 
      { 
       while (reader.Read()) 
       { 
        if (reader["Role"] != DBNull.Value) 
        { 
         Role = Convert.ToString(reader["Role"]); 
         if(Role == UserRole.Admin.ToString()) 
         { 
          IsAdmin = true; 
         } 
         if (Role == UserRole.User.ToString()) 
         { 
          IsUser = true; 
         } 
        } 
        else 
        { 
         Role = ""; 
        } 
       } 
      } 
      reader.Close(); 

그것은 C# 코드와 DB에 테이블을 액세스 할 수 있습니다 또는 나는 그것을 다른 작업을 수행 할 수 있습니다?

감사 걸릴주의, Ragims

+0

약 질문 없습니까 데이터베이스에서 데이터를 검색하는 방법 또는 알고리즘을 작성하는 방법? – RedFilter

+0

Entity Framework, LINQ to SQL, nhibernate와 같은 데이터 액세스 기술을 사용하고 있습니까? 또는 .net SqlClient를 사용하고 싶습니까? – CodingGorilla

+0

RedFilter : 데이터를 검색하는 방법. CodingGorilla : SQL 클래스를 지원하여 C# 코드에서 직접 DB에서 데이터를 읽는 중입니다. –

답변

0

(더 ORM, 아니의 LINQ-SQL 또는 무언가), 다음 코드는 다음과 같이 보일해야합니다 :

// you pass in a UserID (numeric), you get back a list of roles that user has 
public List<string> GetRolesForUser(int userID) 
{  
    // SQL select statement - adjust as needed 
    string selectStmt = "SELECT Role FROM dbo.UserRole WHERE UserID = @YourUserID"; 

    // create the resulting list of roles 
    List<string> _allRoles = new List<string>(); 

    // define SqlConnection and SqlCommand to grab the data 
    using(SqlConnection _con = new SqlConnection('your connection string here')) 
    using(SqlCommand _cmd = new SqlCommand(selectStmt, _con)) 
    { 
     // define the parameter for your SQL statement and fill the value 
     _cmd.Parameters.Add("@YourUserID", SqlDbType.Int); 
     _cmd.Parameters["@YourUserID"].Value = userID; 

     _con.Open(); 

     // create SqlDataReader to grab the rows 
     using(SqlDataReader rdr = _cmd.ExecuteReader()) 
     { 
      // loop over all rows returned by SqlDataReader 
      while(rdr.Read()) 
      { 
       // grab the column no. 0 (corresponds to "Role" from your 
       // SQL select statement) as a string, and store it into list of roles 
       _allRoles.Add(rdr.GetString(0)); 
      } 
     } 
    }  

    return _allRoles; 
} 
+0

와우 아주 흥미롭고 빠른 해결책 –

0

난 당신이 ADO, LinqToSql 또는 엔티티 프레임 워크에 읽을 필요가 있다고 생각. 이러한 모든 기술을 통해 SQL 데이터베이스에 액세스 할 수 있습니다. 당신이 더 많은 정보를 추가하기 때문에

편집 :

대신 한 번에 각 레코드 하나지만 반복, 당신은 내가 생각하는 데이터베이스를 사용하여 더 나을 것입니다.

다음은 사용자 이름별로 그룹화하고 두 개 이상의 역할을 가진 사용자를 반환하는 SQL입니다. (참고, 내 SQL은 좋지 않아,이 일을 더 나은 방법이 될 수 있습니다). 테이블을 일치하도록 데이터베이스 열을 변경

select username, COUNT(id) from <yourtable> group by username having COUNT(id) > 1 
+0

그 meen 내가 얼마나 많은 역할 테이블에 사용자가 있는지 확인하기 위해 C# 코드에서 SQL 문을 작성해야합니까? –

+0

@Ragims : 데이터베이스에 액세스하는 방법에 따라 다릅니다. 귀하의 질문은 약간 불분명합니다. 이미 데이터 액세스가 가능하고 논리를 구조화하려고하거나 데이터에 액세스하는 방법을 묻고 있습니까? 전자의 경우 데이터에 액세스하는 데 사용하는 방법을 알려주십시오. – David

+0

데이터베이스에서 데이터를 얻었습니다. 하지만 속성 역할에 처음 선택된 값 (값 = 관리자) 만 있습니다. 문제는 사용자가 두 번째 값 (값 = 사용자)을 갖고 있으며 읽지 못한다는 것입니다. 그런 식으로 나는 두 번째 가치를 얻는 방법을 모른다. 어쩌면 foreach 루프로 ... –

1

여기 사람이 세부 사항에 많은 도움이 될 수 있기 전에, 코드를 통해 DB에 접근하는 많은 방법이있다, 당신은 그들 중 하나를 선택해야합니다.

DB 액세스 방법의 짧은 목록은 다음과 같습니다
1) ORM 소프트웨어 (엔티티 프레임 워크, 자 NHibernate 등), 내가 전에 튜토리얼에 대한 그들에 구글의 연구를 수행하는 것이 좋습니다 거기에 이들에 대한 자료가 많이 있습니다 당신은 (튜토리얼/연습 꽤 멀리 당신을 얻을 수 있습니다)

2) Linq에이 (specificaly Linq에-2-SQL)를 다시, 구글이나 MSDN 웹 사이트를 통해이 사용할 수에 대한 문서를 많이 거기에 질문을 시작합니다.

3) ADO.NET 이것은 일을하는 오래된 방법입니다. (대체로 좋지는 않지만 매우 단순한 것으로 작동합니다.) 다시 말하지만, 많은 자원이 존재합니다.

기술을 선택하고 기본 사항을 살펴 본 다음에는 (특정 질문은 찾을 수있는 자습서에서 다루어 져야합니다.) 특정 문제와 관련된 특정 질문이 있으면 다시 게시하십시오 너 데. 여기에 사람들은 당신이 상당히 짧은 순서로 공원 밖의 질문을 노크 할 수 있어야합니다. 당신이 "똑바로"ADO.NET 사용하지 않는 경우

관련 문제