如何修复'System.IndexOutOfRangeException:'位置0没有行。'错误?

时间:2019-01-08 22:22:05

标签: sql vb.net oledb access

我正在使用SQL和OLEDB在VB.NET中创建一个登录系统(如果有帮助的话)。我正在尝试在表格中插入一个新项目,但是却不断出现异常,该如何解决?

我试图简单地将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 :(得分:0)

这表明您的tblTable中没有行,并且由于您试图获取第一行(... tblTable.Rows(0)...),因此会引发错误。

答案 1 :(得分:0)

这很难读懂:

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)