MuhammadNaamh Ответов: 3

Проверка того, существует ли имя пользователя уже в БД


protected void Page_Load(object sender, EventArgs e)
   {
       if (IsPostBack)
       {
           SqlConnection conn = new SqlConnection("Data Source=DESKTOP-06QKCFT\\SQLEXPRESS;Initial Catalog=CMS1;Integrated Security=True");
           conn.Open();
           bool exists = false;
           string chechuser = "SELECT count(*) FROM [user] where username='" + t_username.Text + "'";
           SqlCommand cmd = new SqlCommand(chechuser, conn);
           cmd.Parameters.AddWithValue("UserName", t_username.Text);
           exists = (int)cmd.ExecuteScalar() > 0;
           if (exists)
           {
               Response.Write("User Already Exists");
           }
           conn.Close();
       }
   }


Что я уже пробовал:

I have tried it in this way but not working the user still enter to DB:

<pre> if (IsPostBack)// to check if the user is already exsist
       {
           SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["regstration_ConnectionString"].ConnectionString);
           conn.Open();
           string checkuser = "selecte count(*) from Table where username='" + t_username.Text + "'";
           SqlCommand com = new SqlCommand(checkuser, conn);
           int temp = Convert.ToInt32(com.ExecuteScalar().ToString());
           if(temp == 1)
           {

               Response.Write("User Already Exists");
           }

            conn.Close();


        }

Tomas Takac

Не могли бы вы объяснить, в чем тут проблема?

MuhammadNaamh

этот код не работает я пробовал 2 способа но ничего не вышло :
охраняемых недействительными в(объект отправителя, EventArgs в электронной)
{
if (IsPostBack)
{
SqlConnection conn = new SqlConnection("источник данных=DESKTOP-06QKCFT\\SQLEXPRESS;начальный каталог=CMS1;Интегрированная безопасность=True");
Коннектикут.Открыть();
боол существует = ложь;
строка chechuser = "SELECT count(*) FROM [user] where username='" + t_username.Текст + "'";
SqlCommand cmd = new SqlCommand(chechuser, conn);
cmd.параметры.AddWithValue("UserName", t_username.Текст);
exists = (int)cmd.ExecuteScalar() > 0;
если (существует)
{
Ответ.Write("Пользователь Уже Существует");
}
Коннектикут.Закрывать();
}
}

Richard MacCutchan

Вы неправильно написали слово "selecte" в своем SQL. Кроме того, почему вы преобразуете целое число в строку только для того, чтобы преобразовать его обратно в целое число?

MuhammadNaamh

нет мой друг во втором запросе это правильно но не работает :
охраняемых недействительными в(объект отправителя, EventArgs в электронной)
{
if (IsPostBack)
{
SqlConnection conn = new SqlConnection("источник данных=DESKTOP-06QKCFT\\SQLEXPRESS;начальный каталог=CMS1;Интегрированная безопасность=True");
Коннектикут.Открыть();
боол существует = ложь;
строка chechuser = "SELECT count(*) FROM [user] where username='" + t_username.Текст + "'";
SqlCommand cmd = new SqlCommand(chechuser, conn);
cmd.параметры.AddWithValue("UserName", t_username.Текст);
exists = (int)cmd.ExecuteScalar() > 0;
если (существует)
{
Ответ.Write("Пользователь Уже Существует");
}
Коннектикут.Закрывать();
}
}

Richard MacCutchan

Что значит "не работает" означает? Выполняли ли вы какую-либо фактическую отладку, чтобы точно узнать, что происходит при выполнении этого запроса?

MuhammadNaamh

Я имею в виду когда я создаю новый 2 пользователя имеют одно и то же имя но в БД я написал код выше надеюсь попробовать показать сообщение для вставки нового пользователя не существует в БД
вы уловили эту идею ? и это не дает мне никакой ошибки но сообщение не внешний вид это моя проблема

Richard MacCutchan

Да, но вы все еще не объяснили, что происходит, кроме того факта, что ваше предложение SELECT может работать неправильно. Мы не можем догадаться, что происходит, когда вы запускаете этот код.

3 Ответов

Рейтинг:
2

OriginalGriff

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

SELECT не имеет буквы "E" в конце:

string checkuser = "selecte count(*) from ...


Ваши два оператора SELECT используют разные таблицы:
SELECT count(*) FROM [user] where username=
И
selecte count(*) from Table where username=
Выясните, где находится eit, и используйте правильную таблицу - я подозреваю, что вторая неисправна, так как таблица-это зарезервированное слово SQL.
Цитата:
не работает пользователь все равно входит в БД:

Ну...не в этом коде.
Этот код просто проверяет, существует ли пользователь, и печатает сообщение, если оно существует, - он ничего не делает, чтобы предотвратить последующую вставку пользователя кодом.

Этот код выглядит так, будто вы гадаете и надеетесь на лучшее, вместо того чтобы сидеть и думать о том, что вы пытаетесь сделать: параметр, который вы не используете, жестко закодированные строки подключения, отсутствие кода вставки, нерелевантные преобразования и все такое прочее.
Остановитесь, подумайте и придумайте. Затем выбросьте эту кучу и код с нуля. Это сэкономит вам много времени в долгосрочной перспективе, Честное слово.


MuhammadNaamh

вы внимательно читали этот код? событие page_Load внутри него я проверяю, есть ли страница post back, что означает, что есть код, запущенный этот код должен быть вставлен в базу данных, и это работа проблема в этом коде, почему сообщение не shwing это мой вопрос .
спасибо за ваш совет я буду работать с вами

охраняемых недействительными в(объект отправителя, EventArgs в электронной)
{
if (IsPostBack)
{
SqlConnection conn = new SqlConnection("источник данных=DESKTOP-06QKCFT\\SQLEXPRESS;начальный каталог=CMS1;Интегрированная безопасность=True");
Коннектикут.Открыть();
боол существует = ложь;
строка chechuser = "SELECT count(*) FROM [user] where username='" + t_username.Текст + "'";
SqlCommand cmd = new SqlCommand(chechuser, conn);
cmd.параметры.AddWithValue("UserName", t_username.Текст);
exists = (int)cmd.ExecuteScalar() > 0;
если (существует)
{
Ответ.Write("Пользователь Уже Существует");
}
Коннектикут.Закрывать();
}
}

OriginalGriff

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

MuhammadNaamh

Я не хочу вас обидеть :) спасибо за ваш совет я исправляю код (удаляю 'string')
спасибо за тебя :)

Рейтинг:
1

Member 14758619

частный bool isValid()
{
боол существует = ложь;
Команда sqlcommand cmd и = новая команда sqlcommand("выбрать количество(*) из пользователей, где имя пользователя=@имя пользователя", кон);
УМК.Свойство Commandtype = Значение Commandtype.Текст;
cmd.параметры.AddWithValue ("@username", txt_username.Текст);
exists = (int)cmd.ExecuteScalar() > 0;
если (существует)
{
Ящик для сообщений.Show("Useralready существует");
возвращать false;

}
вернуть true;

}


проверено и работает отлично все в порядке!!!