【问题标题】:Error: Fill: SelectCommand.Connection property has not been initialized错误:填充:SelectCommand.Connection 属性尚未初始化
【发布时间】:2012-11-22 15:13:10
【问题描述】:

我在这里遇到了一些问题。我正在使用它将信息从预先填充的列表视图上传到远程服务器上的 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

【问题讨论】:

  • 听起来您在调用 legitsql() 之前没有打开或配置与数据库的连接

标签: .net sql vb.net


【解决方案1】:

这可能与您的问题有关,但是,您应该在完成连接后将其处理掉。你应该使用Using-statement:

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 命令中的一个错误(您甚至使用了名字作为姓氏)。我不知道为什么您在插入这些记录时每次迭代都使用DataAdapter 填充DataSets。我省略了那部分,因为它没有意义。

【讨论】:

  • 我明白你是怎么做的,它比我做的要干净得多。感谢您的帮助,但我得到了一个相关但略有不同的错误。在 cmd.ExecuteNonQuery() 上,连接必须有效且打开会导致崩溃。感谢您的帮助,
  • @Ksingh:编辑了我的答案,在循环之前添加了sqlcon.Open();。使用 Command 时需要手动打开连接(如果连接关闭,DataAdapter 会隐式打开连接)。
  • 在命令执行期间遇到致命错误。在同一行之后,我在评论后立即发现了 Sqlcon.open。谢谢!
  • @Ksingh:尝试用@ 替换参数的?。我通常使用 Sql-Server 作为 rdbms,我认为您需要 ? 作为参数,而不是像 MS SQL-Server 中的 @