2010-08-20 191 views
1

我在数据库中有一个SQL表“角色”。我想知道用户是否有一个或多个角色(管理员/用户),然后在用户有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(); 

是否有可能访问表中DB与C#代码或我能做到这一点有什么不同?

感谢和照顾, Ragims

+0

你对问题如何从数据库中检索数据,或者如何编写算法? – RedFilter 2010-08-20 13:51:11

+0

您是否使用任何数据访问技术,如实体框架,LINQ to SQL,nhibernate?或者你想只使用.net SqlClient? – CodingGorilla 2010-08-20 13:51:30

+0

RedFilter:如何检索数据。 CodingGorilla:我在支持SQL类的c#代码中直接从DB读取数据。 – 2010-08-20 13:54:56

回答

0

如果您使用“直” ADO.NET(无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

哇,它非常有趣和快速的解决方案 – 2010-08-20 14:12:56

0

我认为你需要在ADO,LinqToSql或实体框架阅读起来。所有这些技术都可以访问SQL数据库。

编辑,因为你增加了更多的信息:

而是循环尽管每个记录一次一个,你会更好用我认为数据库。

以下是一些SQL,它们将按用户名分组,并返回具有多个角色的用户。 (注意,我的sql不是很好,可能是更好的方法来做到这一点)。更改数据库列,以符合您的表

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

,我需要在C#代码中编写一个sql语句来检查表中有多少用户角色? – 2010-08-20 13:57:03

+0

@Ragims:这取决于你如何访问数据库。你的问题有点不清楚。你是否已经拥有数据访问权限,并且只是试图构建逻辑结构,或者你在问如何访问数据?如果前者告诉我们您使用哪种方法访问数据。 – David 2010-08-20 13:58:40

+0

我确实从数据库获得了数据。但是我在Property Role中只是第一个选择的用户值(值= admin)。问题是用户有第二个值(值=用户),并且这不会被帮助。这样我不知道如何获得第二个值。也许与foreach循环... – 2010-08-20 14:01:47

1

有很多的方法,通过代码来访问你的数据库,在此之前,任何人都可以在具体多大的帮助,你需要选择其中之一。

的DB访问方法的短名单是:
1)ORM软件(实体框架,NHibernate的,等等)有很多的资源,在那里为这些,我建议这样做对他们的谷歌研究的教程之前你刚开始问问题(教程/演练可以让你很远)

2)的LINQ(specificaly的Linq-2-SQL)此外,还有大量的文件在此可通过谷歌或MSDN网站。

3)ADO.NET这是旧的做事方式(很大程度上不受青睐,现在,但它适用于非常简单的东西)。再次,存在大量资源。一旦你选择了一项技术并通过基础知识(你的具体问题确实应该涵盖在你可以找到的任何教程中,我猜),然后回答关于具体问题的任何具体问题你有。 SO这里的人应该能够在相当短的时间内解决你在公园外遇到的任何问题。

相关问题