0

ここでこのコードに問題があります。これを使用して、事前に入力されたリストビューからリモート サーバー上の SQL テーブルに情報をアップロードしています。エラーのようです:

Fill: 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
4

1 に答える 1

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コマンドのバグをすでに修正したことに注意してください(姓にも名を使用しました)。これらのレコードを挿入している間、すべての反復をDataAdapter埋めるためにa を使用している理由がわかりません。DataSetsその部分は無意味なので省きました。

于 2012-11-22T15:25:17.510 に答える