我正在使用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没有行。
答案 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)