2015-06-22 3 views
2

У меня есть таблица базы данных с именем Logins, которая имеет 3 столбца: Username, Password и Category. Категория имеет два типа: Admin и User.Администратор и пользователь не работают

У меня есть форма с двумя текстовыми полями, где пользователь будет писать свое имя пользователя и пароль. Используя ввод текстового поля имени пользователя, я хочу проверить, является ли данное имя пользователя Admin или User и на основании этого открывают разные формы.

Я получаю следующее сообщение об ошибке:

Unexpected error:Incorrect syntax near "'"

SqlConnection con = new SqlConnection("Data Source=JAYI-PC\\SQLEXPRESS;Initial Catalog=db-ub;Integrated Security=True"); 
try 
{ 
    con.Open(); 
    SqlCommand cmd = new SqlCommand(@"SELECT Count(*) FROM Logins 
          WHERE [email protected] and 
          [email protected],[email protected]", con); 
    cmd.Parameters.AddWithValue("@uname", textBox_usern.Text); 
    cmd.Parameters.AddWithValue("@pass", textBox_pwd.Text); 
    cmd.Parameters.AddWithValue("@ctgy", c); //Can't understand how to check it 

    int result = (int)cmd.ExecuteScalar(); 

    if (result > 0) 
    { 
     if (c== "Admin")//this one will chek whether user is admin or user 
     { 
      MessageBox.Show("Welcome Admin"); 
      Admin f1 = new Admin(); 
      f1.Show(); 
     } 

     else 
     { 
      MessageBox.Show("Welcome " + textBox_usern.Text); 
      FormCheck f3 = new FormCheck(); 
      f3.Show(); 
     } 
    } 

    else 
    { 
     MessageBox.Show("Incorrect login"); 
    } 
    textBox_usern.Clear(); 
    textBox_pwd.Clear(); 

} 
catch (Exception ex) 
{ 
    MessageBox.Show("Unexpected error:" + ex.Message); 
} 
+0

Не можете редактировать правильно –

+0

Вы хранить ваши пароли в виде обычного текста? Пожалуйста, не делай этого. – MAV

+0

MAV - новичок. Что мне тогда делать? Пожалуйста, помогите –

ответ

1

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

SqlConnection con = new SqlConnection("Data Source=JAYI-PC\\SQLEXPRESS; 
    Initial Catalog=db-ub;Integrated Security=True"); 
    try 
    { 
     con.Open(); 
     string cat = null; 
     SqlCommand cmd = new SqlCommand(@"SELECT Username,Password,Category 
     FROM Logins WHERE [email protected] and 
     [email protected]", con); 

     cmd.Parameters.AddWithValue("@uname", textBox_usern.Text); 
     cmd.Parameters.AddWithValue("@pass", textBox_pwd.Text); 

     SqlDataReader rdr = cmd.ExecuteReader(); 
     //int result = (int)cmd.ExecuteScalar(); 

     int result = 0; 
     while(rdr.Read() 
    { 
     result++; //to confirm it entered while loop so data is there 
     cat = rdr["Category"].ToString(); 

    } 

     if (result > 0) 
     { 
      if (cat == "Admin")//this one will chek whether user is admin or 
           user 
      { 
       MessageBox.Show("Welcome Admin"); 
       Admin f1 = new Admin(); 
       f1.Show(); 
      } 

      else 
      { 
       MessageBox.Show("Welcome " + textBox_usern.Text); 
       FormCheck f3 = new FormCheck(); 
       f3.Show(); 
      } 
     } 

     else 
     { 
      MessageBox.Show("Incorrect login"); 
     } 
     textBox_usern.Clear(); 
     textBox_pwd.Clear(); 
+0

откуда появилась эта «кошка»? –

+0

@jayitaroy после con.open() я объявила строку 'string cat = null;' – Sachu

+0

@jayitaRoy переименовать ее как что-то еще..категорию .. или что-то вы хотите – Sachu

3

Ваш запрос неверен, он пропускает одну and и иметь дополнительный ,. это должно быть так:

SELECT Count(*) FROM Logins 
WHERE [email protected] and 
[email protected] and [email protected] 
+0

Спасибо, но я думаю, что я делаю что-то неправильно со значением @ctgy тоже. Как проверить его и получить правильное значение. Не могу понять –

+0

@JayitaRoy Где вы определяете 'c'? Мы не знаем, как вы проверяете, является ли пользователь администратором или пользователем. – cubrr

+0

вы должны отлаживать свой код, http://www.dotnetperls.com/debugging – dotctor

2

Я считаю, что вы пытаетесь прочитать категорию изменить запрос к этому

SqlCommand cmd = new SqlCommand(@"SELECT Category FROM Logins 
          WHERE [email protected] and 
          [email protected]", con); 
cmd.Parameters.AddWithValue("@uname", textBox_usern.Text); 
cmd.Parameters.AddWithValue("@pass", textBox_pwd.Text); 

SqlDataReader reader = cmd.ExecuteReader(); 
if (reader.Read()) 
{ 
var c = reader["Category"].ToString(); 
    if (c== "Admin")//this one will chek whether user is admin or user 
    { 
     MessageBox.Show("Welcome Admin"); 
     Admin f1 = new Admin(); 
     f1.Show(); 
    } 

    else 
    { 
     MessageBox.Show("Welcome " + textBox_usern.Text); 
     FormCheck f3 = new FormCheck(); 
     f3.Show(); 
    } 
} 
else 
{ 
    MessageBox.Show("Incorrect login"); 
} 
textBox_usern.Clear(); 
textBox_pwd.Clear(); 
+0

'int result = (int) cmd.ExecuteReader();' no need – Sachu

+0

oops забыл удалить его – meda

+0

Показана ошибка «Неожиданная ошибка: Категория» –

Смежные вопросы