2016-08-19 1 views
-1

[Как говорится в названии .... Это всплывает, когда я пытаюсь щелкнуть Login. Просто enter image description hereОшибка `Index была за пределами массива`, когда я пытаюсь получить результаты запроса.

У меня также есть другая система с той же самой, но это не ошибка, как это и сейчас я слишком слеп, чтобы найти то, что случилось XDD

private void btnLogin_Click(object sender, EventArgs e) 
{ 
    try 
    { 
    string constring = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= 
    |DataDirectory|\MMG.mdb"; 
    string cmdText = ("SELECT COUNT(*) FROM Accounts WHERE User_name=? AND Pass_word=?"); 
    using (OleDbConnection con = new OleDbConnection(constring)) 
    using (OleDbCommand cmd = new OleDbCommand(cmdText, con)) 
    { 
     con.Open(); 
     cmd.Parameters.AddWithValue("@UName", txtUserName.Text); 
     cmd.Parameters.AddWithValue("@PWord", txtPassword.Text); 
     DataTable dt = db.execQuery("SELECT * FROM Accounts WHERE User_name='" + txtUserName.Text + "' AND Pass_word='" + txtPassword.Text + "'"); 

     if (dt.Rows.Count > 0) 
     { 
      if (dt.Rows[0].ItemArray[5].ToString() == "Manager") 
      { 
       this.Hide(); 
       frmMainForm mnf = new frmMainForm(); 
       mnf.ShowDialog(); 
       this.Close(); 
      } 
      else if (dt.Rows[0].ItemArray[5].ToString() == "Cashier") 
      { 
       this.Hide(); 
       Sales mnf = new Sales(); 
       mnf.ShowDialog(); 
       this.Close(); 
      } 
     } 
    } 
} 

Благодарность за решение заранее! :)

+0

Rows.Length сделать и Rows [0] .Length, и вы будете знать, что пошло не так – Steve

+2

Могу ли я использовать ' '; DROP TABLE Accounts; - 'как пароль? Вы должны * действительно проверить, есть ли какие-либо результаты, прежде чем пытаться получить к ним доступ. У вас гораздо большие проблемы, хотя, поскольку ваш код позволяет взломать ваше приложение за считанные секунды –

+2

Я ставлю на 5 на 'dt.Rows [0] .ItemArray [5]' – Jcl

ответ

1

Вам нужен чек ItemArray:

if(dt.Rows.Count > 0) 
{ 
    if(dt.Rows[0].ItemArray.Length > 5) 
    { 
     // YOUR CODE 
    } 
} 
+0

должно быть> 5 действительно – Steve

+0

Обновлено спасибо. – Oluwafemi

+0

вы также должны проверить, если dt.Rows [0]! = Null и Rows [0] .ItemArray! = Null – hpfs

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