c #sql database - 如何从表中读取所有特定的行?

时间:2010-08-20 13:49:04

标签: c# sql sql-server database

我在DB中有一个SQL表“角色”。我想知道用户是否有一个或多个角色(管理员/用户),然后在用户有2个角色的情况下使用值执行某些操作。

问题:我无法从数据库获取所有值,我只得到第一个。

我能用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

3 个答案:

答案 0 :(得分:1)

有很多方法可以通过代码访问您的数据库,在这里的任何人可以对细节提供很多帮助之前,您需要选择其中一个。

DB Access方法的简短列表是:
1) ORM软件(实体框架,NHibernate等)这里有很多资源,我建议你在开始提问之前对它们进行谷歌研究(教程/演练)可以让你相当远)

2) Linq (具体是Linq-2-SQL)同样,有很多关于此的文档可以通过Google或MSDN网站获得。

3) ADO.NET 这是旧的做事方式(现在很大程度上不受欢迎,但它适用于非常简单的东西)。同样,存在大量资源。

一旦你选择了一项技术并完成了基础知识(你的具体问题确实应该被你能找到的任何教程所覆盖,我猜),回复一下有关具体问题的任何具体问题你'有。这里的人们应该能够在相当短的时间内解决你离开公园的任何问题。

答案 1 :(得分:0)

我认为您需要阅读ADO,LinqToSql或实体框架。所有这些技术都将允许访问SQL数据库。

编辑,因为您添加了更多信息:

不是一次循环使用每个记录,而是最好使用我认为的数据库。

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

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

答案 2 :(得分:0)

如果您正在使用“直接”ADO.NET(没有ORM,没有Linq-to-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;
}