sam
sam

Reputation: 2596

check if user exists in my database

I have a c# login forum that has two text-boxes

1.username

2.password

I am trying to check if the user exists in my Oracle database or not. If so, I want it to do something (like call another forum, etc...), but I'm getting an error msg that says I have a missing expression. Whats wrong with it?

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 UserName=@username";

        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;
    }

}

Upvotes: 0

Views: 1062

Answers (2)

Sudhakar Tillapudi
Sudhakar Tillapudi

Reputation: 26199

1. you need to assign parameters before assigning commandstring to the CommandText.
2. you need to call Read() OracleDataReader object reader before accessing the records.
3. you should return true when true only when user is found.(in second if condition open curly braces is missing).
4. you can use using{} block for all IDisposable Implemented classes in your program so that their objects disposal will be taken care.(so you don't need to call Close() on Connection or Command objects)

Complete Solution:

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]=@username";

        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;

}

Upvotes: 0

ohiodoug
ohiodoug

Reputation: 1513

You need to call the Read method on the DataReader before trying to access the properties.

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

Good luck!

Upvotes: 1

Related Questions