База данных C # SQL - Как прочитать все конкретные строки из таблицы? - PullRequest
1 голос
/ 20 августа 2010

У меня есть таблица 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 # или я могу сделать это по-другому?

Ответы [ 3 ]

1 голос
/ 20 августа 2010

Существует множество способов получить доступ к вашей БД с помощью кода, прежде чем кто-либо из пользователей сможет помочь вам со спецификой, вам нужно выбрать один из них.

Краткий список методов доступа к БД::1) ORM Software (Entity Framework, NHibernate и т. Д.). Для этого существует множество ресурсов, поэтому я рекомендую изучить их в Google, прежде чем просто задавать вопросы (учебники / пошаговые руководства могутдовольно далеко)

2) Linq (конкретно Linq-2-SQL) Опять же, есть много документации по этому вопросу, доступной через Google или на веб-сайте MSDN.

3) ADO.NET Это старый способ ведения дел (в настоящее время в значительной степени его не устраивают, но он работает для очень простых вещей).Опять же, существует множество ресурсов.

После того, как вы выбрали технологию и прошли основы (ваш конкретный вопрос должен, действительно, быть покрыт практически любым учебником, который вы можете найти, я думаю),возвращайтесь с любыми конкретными вопросами, касающимися ваших проблем.Люди здесь, на SO, должны быть в состоянии ответить на любой вопрос, который вы получили вне парка в довольно короткий срок.

0 голосов
/ 20 августа 2010

Если вы используете «прямой» 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;
}
0 голосов
/ 20 августа 2010

Я думаю, вам нужно прочитать об ADO, LinqToSql или Entity Framework. Все эти технологии обеспечат доступ к базе данных SQL.

Изменить, так как вы добавили больше информации:

Вместо того, чтобы зацикливать каждую запись по одной, лучше использовать базу данных, я думаю.

Вот некоторые SQL, которые будут группироваться по имени пользователя и возвращать тех пользователей, которые имеют более 1 роли. (обратите внимание, мой sql не велик, может быть лучший способ сделать это). Измените столбцы базы данных, чтобы они соответствовали вашей таблице

select username, COUNT(id) from <yourtable> group by username having COUNT(id) > 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...