2013-11-30 3 views
0

У меня есть C# для входа в форуме, который имеет два текстовых урныпроверить, если пользователь существует в моей базе данных

1.username

2.password

Я пытаюсь проверить, если пользователь существует в моя база данных Oracle или нет. Если это так, я хочу что-то сделать (например, вызвать другой форум и т. Д.), Но я получаю сообщение об ошибке, которое говорит, что у меня отсутствует выражение. Что с этим не так?

private void button1_Click(object sender, EventArgs e) 
{ 
    isUserExist(textBox1.Text,textBox2.Text); 
} 

public bool isUserExist(string username,string password) 
{ 
    try 
    { 
     string connstring = "data source=test_db;user id=system;password=password;"; 
     string statementcmd = "SELECT * FROM register_user Where [email protected]"; 

     OracleConnection conn = new OracleConnection(connstring); 
     OracleCommand cmd = new OracleCommand(); 
     cmd.Connection = conn; 
     cmd.CommandText = statementcmd; 
     cmd.Parameters.Add("@username", username); 
     if (conn.State != ConnectionState.Open) 
     { 
      conn.Open(); 
      OracleDataReader reader = cmd.ExecuteReader(); 

      if (!reader.HasRows) 
      { MessageBox.Show("User Name Not Found"); } 

      if (!password.Equals(reader["password"].ToString())) 
       MessageBox.Show("Incorrect Password"); 
      reader.Close(); 
      } 
      return true; 

     } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
     return false; 
    } 

} 

ответ

1

Перед попыткой доступа к свойствам необходимо вызвать метод Read на DataReader.

if (reader.Read()) 
{ 
    // Do stuff 
} 

Удачи вам!

0

1. необходимо назначить parameters перед назначением commandstring к CommandText.
2. необходимо позвонить Read()OracleDataReader объект reader перед тем, как получить доступ к records.
3. вы должны вернуть значение true, если true только в том случае, если пользователь находится. (Во втором случае, если состояние не закрыто, фигурные скобки отсутствуют).
4. вы можете использовать using{} блок для всех IDisposable Реализовано классов в вашей программе, так что их объекты disposal будут заботиться. (Так что вам не нужно вызывать Close() на Connection или Command объектов)

Полное решение:

public bool isUserExist(string username,string password) 
{ 
    bool status=false; 
    try 
    { 
     string connstring = "data source=test_db;user id=system;password=password;"; 
     string statementcmd = "SELECT * FROM register_user Where [UserName][email protected]"; 

     using(OracleConnection conn = new OracleConnection(connstring)) 
     { 

     using(OracleCommand cmd = new OracleCommand()) 
     { 
     cmd.Connection = conn; 
     cmd.Parameters.Add("@username", username);//add parameters before assigning it to CommandText 
     cmd.CommandText = statementcmd; 

     if (conn.State != ConnectionState.Open) 
     { 
      conn.Open(); 
      OracleDataReader reader = cmd.ExecuteReader(); 


      if (!reader.Read()) 
      { MessageBox.Show("User Name Not Found"); } 

      if (!password.Equals(reader["password"].ToString())) 
      { 
       status=true; 
       MessageBox.Show("Incorrect Password"); 

      } 


     } 
     } 

    } 

    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
     status=false; 
    } 

return status; 

} 
+0

же messagge ошибки ORA-00936 отсутствует выражение: S – sam

+0

@xXghostXx: я думаю, что UserName это зарезервированное слово в Oracle завернуть его в квадратных скобках ' [] 'см. мой отредактированный ответ ... –

+0

Я попытался изменить имя целого столбца на« uname »и имя аргумента un, но такая же ошибка сохранилась – sam

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