Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизация пользователей 
:(
    Опции темы
Redstuff
Дата 14.8.2007, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Есть БД с таблицей users. На форме: txtLogin, txtPassword, btnLogin, btnRegistration (при нажатии на btnRegistration появляются: txtFName, txtLName, txtPhone, btnSend)
Код

USE [RegHardware]
GO
/****** Object:  Table [dbo].[Users]    Script Date: 08/14/2007 14:03:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Users](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Login] [nvarchar](20) COLLATE Cyrillic_General_CI_AS NOT NULL,
    [Password] [nvarchar](20) COLLATE Cyrillic_General_CI_AS NOT NULL,
    [FName] [nvarchar](20) COLLATE Cyrillic_General_CI_AS NOT NULL,
    [LName] [nvarchar](20) COLLATE Cyrillic_General_CI_AS NOT NULL,
    [Phone] [nchar](10) COLLATE Cyrillic_General_CI_AS NULL,
    [RAdmin] [bit] NOT NULL,
 CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
USE [RegHardware]
GO
ALTER TABLE [dbo].[Users]  WITH CHECK ADD  CONSTRAINT [CK_Phone] CHECK  (([phone] like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'))
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Check for valid phone' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'Users', @level2type=N'CONSTRAINT', @level2name=N'CK_Phone'

Самому первому зарегистрировавшемуся пользователю присвоить все права (RAdmin = true) остальным присваивать (RAdmin = false)
Потом первый пользователь сможет принимать решения кому назначать еще права администратора.

Пользователям нельзя редактировать и недоступны некоторые функции программы (назначение прав...)

С вашей помощью хочеться реализовать такое.


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Exception
Дата 14.8.2007, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 2
Всего: 186



А в чём, собственно, проблема?
PM   Вверх
Redstuff
Дата 14.8.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Exception, хочеться реализовать так, чтобы было универсально и граммотно.

Чтобы присвоить права только первому пользователю как лучше поступить? Сделать проверку на значение в БД и если такое есть то присваивать только RAdmin = false?


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Exception
Дата 14.8.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 2
Всего: 186



Просто проверяй количество записей в таблице. Если их нет -- устанавливай у новой записи флаг в true, если есть хоть одна -- в false.
А вообще, о том, как грамотно реализовать авторизацию, смотри тут:
http://www.codeguru.com/csharp/.net/net_se...icle.php/c7415/

Добавлено через 7 минут и 58 секунд
http://www.codeguru.com/dbfiles/get_file/R...amp;ds=20040618 -- готовая программа-пример.
PM   Вверх
Redstuff
Дата 14.8.2007, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Вот что пока получается:
Код

private void btnSend_Click(object sender, EventArgs e)
        {
            // Select
            SqlCommand cmdS = new SqlCommand("SELECT * FROM Users", con);
            cmdS.CommandType = CommandType.Text;
            // Insert
            SqlCommand cmdI = new SqlCommand("INSERT INTO Users(ID, Login, Password, FName, LName, Phone, RAdmin)" +
                "VALUES(@ID, @Login, @Password, @FName, @LName, @Phone, @RAdmin)", con);
            cmdI.CommandType = CommandType.Text;
            da.InsertCommand = cmdI;
            // Delete
            SqlCommand cmdD = new SqlCommand("DELETE FROM Users WHERE ID=@ID", con);
            cmdD.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int, 1, ParameterDirection.Input, false, 0, 0,
                "ID", DataRowVersion.Original, null));
            //da.DeleteCommand = cmdD;
            // Update
            SqlCommand cmdU = new SqlCommand("UPDATE Users SET ID=@ID WHERE ID=Original_ID", con);
            cmdU.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int, 1, "ID"));
            cmdU.Parameters.Add(new SqlParameter("@Original_ID", SqlDbType.Int, 1, ParameterDirection.Input, false, 0, 0, "ID", DataRowVersion.Original, null));
            //da.UpdateCommand = cmdU;
            da.SelectCommand = cmdS;
            // Заполнение объекта dataset
            da.Fill(ds, "Users");

            // Сколько строк в первой таблице
            int strTab = ds.Tables[0].Rows.Count;
            // Создание новой строки
            DataRow dr = ds.Tables[0].NewRow();
            // Заполнение новой строки данными
            dr[0] = 1;
            dr[1] = txtLogin.Text;
            dr[2] = txtPassword.Text;
            dr[3] = txtFName.Text;
            dr[4] = txtLName.Text;
            dr[5] = txtPhone.Text;
            if (strTab > 0)
                dr[6] = false;
            else dr[6] = true;
            // Добавление новой строки в таблицу
            ds.Tables[0].Rows.Add(dr);
            da.Update(ds, "Users");
        }


Ошибка: Must declare the scalar variable "@ID"

Добавлено через 2 минуты и 11 секунд
Пока писал сообщение даж не заметил, Exception, спасибо за примеры буду разбираться с ними тоже)


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Exception
Дата 14.8.2007, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 2
Всего: 186



Наверное, ты имел в виду "WHERE ID = @Original_ID" smile .
PM   Вверх
Redstuff
Дата 14.8.2007, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Exception, если честно то не могу понять где ошибка все-равно  smile 
ID (is identity = true, и Primery key)

Код

// Update
            SqlCommand cmdU = new SqlCommand("UPDATE Users SET ID=@ID WHERE ID=Original_ID", con);
            cmdU.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int, 1, "ID"));
            cmdU.Parameters.Add(new SqlParameter("@Original_ID", SqlDbType.Int, 1, ParameterDirection.Input, false, 0, 0, "ID", DataRowVersion.Original, null));
            //da.UpdateCommand = cmdU;


Сделал проверку, заполнил датасет и вывел его в датагрид все ок!
Но вот обновить БД не получается(((

Код взят из книги Майк Гандерлой, Джозеф Джорден, ... SQL Server 2005
Если можно, объясните плиз как лучше через код использовать эти все команды и чутка комментарий к строчкам)... а то авторы книги, на комментарии к коду, времени не тратили ((

Добавлено через 3 минуты и 36 секунд
Еще куда фак пропал? там была хорошая статья про SQL запросы, мне бы она сейчас очень пригодилась  smile 


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Redstuff
Дата 14.8.2007, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Код

cmdI.Parameters.Add("@ID", SqlDbType.Int);
            cmdI.Parameters["@ID"].Direction = ParameterDirection.Input;
            cmdI.Parameters["@ID"].Value = strTab + 1;

            cmdI.Parameters.Add("@Login", SqlDbType.NVarChar);
            cmdI.Parameters["@Login"].Direction = ParameterDirection.Input;
            cmdI.Parameters["@Login"].Value = txtLogin.Text;

            cmdI.Parameters.Add("@Password", SqlDbType.NVarChar);
            cmdI.Parameters["@Password"].Direction = ParameterDirection.Input;
            cmdI.Parameters["@Password"].Value = txtPassword.Text;

            cmdI.Parameters.Add("@FName", SqlDbType.NVarChar);
            cmdI.Parameters["@FName"].Direction = ParameterDirection.Input;
            cmdI.Parameters["@FName"].Value = txtFName.Text;

            cmdI.Parameters.Add("@LName", SqlDbType.NVarChar);
            cmdI.Parameters["@LName"].Direction = ParameterDirection.Input;
            cmdI.Parameters["@LName"].Value = txtLName.Text;

            cmdI.Parameters.Add("@Phone", SqlDbType.NChar);
            cmdI.Parameters["@Phone"].Direction = ParameterDirection.Input;
            cmdI.Parameters["@Phone"].Value = txtPhone.Text;

            cmdI.Parameters.Add("@RAdmin", SqlDbType.Bit);
            cmdI.Parameters["@RAdmin"].Direction = ParameterDirection.Input;
            cmdI.Parameters["@RAdmin"].Value = true;

Обновилась после добавления всего этого...
Проще можно решение?


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
tol05
Дата 14.8.2007, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 11
Всего: 170



Цитата(Redstuff @  14.8.2007,  19:07 Найти цитируемый пост)
Exception, если честно то не могу понять где ошибка все-равно
тебе же Exception, написал, у тебя синтаксическая ошибка в строке запроса

вместо
Код

SqlCommand cmdU = new SqlCommand("UPDATE Users SET ID=@ID WHERE ID=Original_ID", con);


нужно
Код

SqlCommand cmdU = new SqlCommand("UPDATE Users SET ID=@ID WHERE ID=@Original_ID", con);





--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Redstuff
Дата 14.8.2007, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



tol05, я уже так пробовал, не помогает... таже ошибка ((
Ошибка: Must declare the scalar variable "@ID"



--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Idsa
Дата 15.8.2007, 04:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(Redstuff @  14.8.2007,  21:21 Найти цитируемый пост)
ol05, я уже так пробовал, не помогает... таже ошибка ((

У тебя, видимо, не одна ошибка. Верни @ на место smile

Цитата(Redstuff @  14.8.2007,  21:21 Найти цитируемый пост)
Ошибка: Must declare the scalar variable "@ID"

В какой строчке?

P. S. А ты какую СУБД используешь?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Redstuff
Дата 15.8.2007, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Idsa, в стр 41
Код

  da.Update(ds, "Users");


MS SQL Server 2005


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Idsa
Дата 15.8.2007, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(Redstuff @  14.8.2007,  21:21 Найти цитируемый пост)
Ошибка: Must declare the scalar variable "@ID"

Так ты же добавляешь параметры, а значения им не присваиваешь.
Кроме того, int весит 4 байта, а не 1. Да и вообще, размер для int указывать не нужно.
Для добавления параметров тебе следует использовать, например, следующий код:
Код

            SqlCommand command = new SqlCommand();
            SqlParameter idParameter = new SqlParameter("@ID", SqlDbType.Int);
            idParameter.Value = /*здесь присваиваешь значение*/;
            command.Parameters.Add(idParameter);

В случае использования int можно забить на size (для varchar так лучше не делать), да и тип автоматически определится, поэтому можно использовать короткую запись:
Код

            SqlCommand command = new SqlCommand();
            command.Parameters.AddWithValue("@ID", /*здесь присваиваешь значение*/);



--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Redstuff
Дата 15.8.2007, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Все теперь понятно почему ошибка. Намудрил кучу всего лишнего, датасет зачем-то привизал.

Idsa, спасибо! буду знать на счет типа.
Цитата

Самому первому зарегистрировавшемуся пользователю присвоить все права (RAdmin = true) остальным присваивать (RAdmin = false)

С этим разобрался!

Теперь необходимо проверить есть ли такой пользователь в БД и какие у него права. Если все ок, то открыть следующую форму с наличием на ней того функционала который полагается пользователю с его правами.

Как осуществить проверку?
Есть только одна мысль - сравнить txtLogin со столбцом Login, если нашел запомнить номер ID/строки и сверить пароль находящийся там с txtPassword.


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Idsa
Дата 15.8.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(Redstuff @  15.8.2007,  17:46 Найти цитируемый пост)
Есть только одна мысль - сравнить txtLogin со столбцом Login, если нашел запомнить номер ID/строки и сверить пароль находящийся там с txtPassword. 

Зачем искать ID?
Нужно составить запрос, например, такой:
Код

SELECT RAdmin FROM Users WHERE Login = @login AND Password = @password

Параметрам login и password присвоить значения txtLogin и txtPassword соответственно.
После выполнения ExecuteReader() проверить: если reader.HasRows == false, выдать MessageBox с сообщением "Неверный логин или пароль", иначе выполнить reader.Read() и проверить reader["RAdmin"]. Ну а дальше уже реализуй логику своего приложения.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0939 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.