我在这里使用此代码时遇到了一些问题。我正在使用它将信息从预先填充的列表视图上传到远程服务器上的SQL表。似乎错误:
填充:尚未初始化SelectCommand.connection属性
每次我尝试调试时都会出现。任何以前使用相同方法上传信息的程序也会发生这种情况(当时它们工作正常)
我正在使用vb 2012 + win7 / win8
Sub legitsql()
For i As Integer = 0 To UploadMasterStudentFile.numlines - 1
ds = New DataSet
da = New MySqlDataAdapter("insert into SK_StudentList (studentnumber,firstname,lastname,birthdate,year) values('" & Student_Record.StudentNumber(i) & "','" & Student_Record.FirstName(i) & "','" & Student_Record.FirstName(i) & "','" & Student_Record.Birthdate(i) & "','" & Student_Record.Year(i) & "')", sqlcon)
da.Fill(ds, "SK_StudentList")
Next
MessageBox.Show("Student List Updated")
End Sub
答案 0 :(得分:1)
这可能与您的问题有关,但是,您应该在完成连接后处理它们。您应该使用Using
- 声明:
Using sqlcon = New MySqlConnection(connectionString)
Const sql = "insert into SK_StudentList (studentnumber,firstname,lastname,birthdate,year) values(?studentnumber,?firstname,?lastname,?birthdate,?year);"
sqlcon.Open();
For i As Integer = 0 To UploadMasterStudentFile.Count - 1
Using cmd = New MySqlCommand(sql, sqlcon)
cmd.Parameters.AddWithValue("?studentnumber", Student_Record.StudentNumber(i))
cmd.Parameters.AddWithValue("?firstname", Student_Record.FirstName(i))
cmd.Parameters.AddWithValue("?lastname", Student_Record.LastName(i))
cmd.Parameters.AddWithValue("?birthdate", Student_Record.Birthdate(i))
cmd.Parameters.AddWithValue("?year", Student_Record.Year(i))
cmd.ExecuteNonQuery()
End Using
Next
End Using
你还应该使用sql-parameters来避免sql-injection,以防止粗心的错误,并使代码更具可读性。
请注意,我已经更正了sql-command中的错误(即使是lastname也使用了firstname)。在插入这些记录时,我不知道为什么在每次迭代时使用DataAdapter
填充DataSets
。我省略了那部分,因为它毫无意义。