Как исправить 'System.IndexOutOfRangeException:' Нет строки в позиции 0. ' ошибка? - PullRequest
0 голосов
/ 09 января 2019

Я создаю систему входа в VB.NET, используя SQL и OLEDB (если это полезно). Я пытаюсь вставить новый элемент в таблицу, но получаю исключение. Как это исправить?

Я попытался просто изменить нулевое число в этой строке Dim comd As New OleDb.OleDbCommand(sql, Connstring) на другие числа и на recordno, которое является количеством записей в таблице.

Dim sql As String = "INSERT INTO UserInfo (Username, Password, CurrentLevel) VALUES (?, ?, ?)"
Dim comd As New OleDb.OleDbCommand(sql, Connstring)                    
comd.Parameters.AddWithValue(0, tblTable.Rows(recordno)(0))            
comd.Parameters.AddWithValue("@Username", tblTable.Rows(2)(recordno))
comd.Parameters.AddWithValue("@Password", tblTable.Rows(3)(recordno))
comd.Parameters.AddWithValue("@CurrentLevel", tblTable.Rows(4)(recordno))
comd.ExecuteNonQuery() 'run the code to Insert back to the db file

Я ожидаю, что код добавит еще одну запись в таблицу UserInfo, но ничего не происходит, кроме исключения

System.IndexOutOfRangeException: в позиции 0 нет строки.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Это трудно прочитать / понять:

comd.Parameters.AddWithValue(0, tblTable.Rows(recordno)(0))  

Лучше всего использовать строковый аргумент с именем параметра, да, я знаю, AddWithValue перегружен числом, но это легко становится неупорядоченным и трудно определить, к какому параметру относится число, поэтому быть явным и использовать paramName:

comd.Parameters.AddWithValue("paramName", tblTable.Rows(recordno)(0))  

Тогда мы столкнемся с актуальной проблемой:

tblTable.Rows(recordno)(0)    

Вы сделали это неправильно, должно быть:

tblTable.Rows(0)(recordno)      
0 голосов
/ 09 января 2019

Это указывает на то, что в вашей таблице tblTable не было строк, и, поскольку вы пытаетесь получить первую строку (... tblTable.Rows (0) ...), выдается ошибка.

...