2013-09-30 2 views
-1

Мое выражение try/catch всегда дает мне сообщение об ошибке, что «индекс находится за пределами массива», однако функция отлично работает так, как она должна работать. Единственная проблема - это досадная ошибка.index находится за пределами массива

это код, я использую:

 Try 
     conn.Open() 
     Dim Qwery As String = "SELECT a.accid AS 'No', a.setID AS 'ID', l.class AS 'Type', CONCAT(fname,' ',middname,' ',lname) AS 'Name', date(a.bdate) AS 'BirthDate', l.mail AS 'Acount Name', l.login AS 'Login', l.gender AS 'Gender', l.position AS 'Position', l.department AS 'Department', l.tel AS 'Tel No', l.localno AS 'Office Tel', l.cellno AS 'Cell Phone', l.alt_email AS 'Other Email', l.classif AS 'Classification', l.status AS 'Status' FROM entry a, liist l WHERE a.accid = l.accid AND l.status = '0' ORDER BY a.accid Desc" 

     Dim smd As MySqlCommand 
     Dim myreader As MySqlDataReader 
     smd = New MySqlCommand(Qwery, myconn) 
     myreader = smd.ExecuteReader 
     If myreader.Read() = True Then 
      IdBox.Text = myreader.GetValue(0) 
      IdNumBox.Text = myreader.GetValue(1) 
      TypeBox.Text = myreader.GetValue(2) 
      NameBox.Text = myreader.GetValue(3) 
      BDayBox.Text = myreader.GetValue(4) 
      AcNameBox.Text = myreader.GetValue(5) 
      PassBox.Text = myreader.GetValue(6) 
      GenBox.Text = myreader.GetValue(7) 
      PositionBox.Text = myreader.GetValue(8) 
      DepartmentBox.Text = myreader.GetValue(9) 
      TelBox.Text = myreader.GetValue(10) 
      OfficeBox.Text = myreader.GetValue(11) 
      CellBox.Text = myreader.GetValue(12) 
      altMailBox.Text = myreader.GetValue(13) 
      ClassBox.Text = myreader.GetValue(14) 
      StatusBox.Text = myreader.GetValue(15) 
     End If 

     conn.Close() 
    Catch ex As Exception 
     MsgBox("Error: " & ex.Message.ToString()) 
     conn.Close() 
    End Try 

Интересный момент, который я попытался удалить задания меток один за другим. И до myreader.GetValue(3) ошибка не появляется. Если я попробую присвоить больше таблиц, он появится снова.

Кто-нибудь знает причину?

+0

проверьте свой Datareader правильно. Выбрав данные из-за индекса – SANDEEP

+0

Проверьте n ° столбцов myreader(). Уверен, что его меньше 15! –

+0

Что вы понимаете, проверяя datareader? вы можете уточнить, пожалуйста? – meks

ответ

0

Проверьте, что у datareader больше 15 строк. Затем получите доступ к вашему коду.

myreader = smd.ExecuteReader 
     If myreader.Read() = True Then 
if myreader.GetSchemaTable().Rows.Count >= 15 then 
      IdBox.Text = myreader.GetValue(0) 
      IdNumBox.Text = myreader.GetValue(1) 
      TypeBox.Text = myreader.GetValue(2) 
      NameBox.Text = myreader.GetValue(3) 
      BDayBox.Text = myreader.GetValue(4) 
      AcNameBox.Text = myreader.GetValue(5) 
      PassBox.Text = myreader.GetValue(6) 
      GenBox.Text = myreader.GetValue(7) 
      PositionBox.Text = myreader.GetValue(8) 
      DepartmentBox.Text = myreader.GetValue(9) 
      TelBox.Text = myreader.GetValue(10) 
      OfficeBox.Text = myreader.GetValue(11) 
      CellBox.Text = myreader.GetValue(12) 
      altMailBox.Text = myreader.GetValue(13) 
      ClassBox.Text = myreader.GetValue(14) 
      StatusBox.Text = myreader.GetValue(15) 
     End If 
End If 

или попробовать datareaderObject.RecordsAffected >= 15

+0

Я попробовал 'myreader.FieldCount()' вместо этого потому, что 'myreader.GetSchemaTable(). Строки' меня ошибают – meks

+0

Да, Fieldcount неплох! и если это не сработало, попробуйте опцию «Recored Affected» !! –

+0

И попробуйте myreader.GetSchemaTable(). Строки в myreader.GetSchemaTable(). Rows.Count –

0

я думаю, что в вашей дате запроса (a.bdate) AS «РОЖДЕНИЯ» бросает ошибку

может быть причина в том, что a.bdate является нулевое значение и не могут быть преобразованы в дату.

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