help guys. im having this error.. i don't know hat to do.. please help..thankss

#Region "FillListView"

Sub FillListview()
lvList.Items.Clear()
sqlQry = "SELECT * from book ORDER BY book_id ASC"
Dim mycmd As New MySqlCommand(sqlQry, myConn)
Dim dReader As MySqlDataReader = mycmd.ExecuteReader() <----
this is the error im getting it says invalid operation exception was unhandled and must be open and valid --->

While dReader.Read()
With lvList
.Items.Add(dReader("book_id"))
With .Items(.Items.Count - 1).SubItems
.Add(dReader("book_title"))
.Add(dReader("book_author"))
.Add(dReader("book_publisher"))
.Add(dReader("isbn"))
.Add(dReader("call_no"))
End With
End With
End While
dReader.Close()
End Sub
#End Region

Recommended Answers

All 8 Replies

Dim dReader As MySqlDataReader = mycmd.ExecuteReader()

It seems that your reader is from a class module. It is either not open in the context you have shown, so it can not execute any operations. Post us the code under the MySqlDataReader. This might show us why there is no connection.

this is the whole code of the bookform:
*****************************************************************************

Imports MySql.Data.MySqlClient

Public Class bookForm

    Dim myConn As New MySqlConnection
    Dim sqlQry As String = Nothing
    Dim mycmd As New MySqlCommand
    Dim dReader As MySqlDataReader
    'Dim dAdap As New MySqlDataAdapter
    'Dim dSet As New DataSet

    Dim connString As String
    Dim str As String = Nothing

    Private Sub bookForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Call FillListview()
        Call LVsettings()
        Call ConnToDB()
        Call FillListview()
        Call Set1()

    End Sub
#Region "FillListView"

    Sub FillListview()
        lvList.Items.Clear()
        sqlQry = "SELECT * from book ORDER BY book_id ASC"
        mycmd = New MySqlCommand(sqlQry, myConn)
        myConn.Open()
        dReader = mycmd.ExecuteReader

        While dReader.Read
            With lvList
                .Items.Add(dReader("book_id"))
                With .Items(.Items.Count - 1).SubItems
                    .Add(dReader("book_title"))
                    .Add(dReader("book_author"))
                    .Add(dReader("book_publisher"))
                    .Add(dReader("isbn"))
                    .Add(dReader("call_no"))
                End With
            End With
        End While
        dReader.Close()
        myConn.Close()
    End Sub
#End Region

#Region "Connection"
    Sub ConnToDB()
        Try
            With myConn
                If .State = ConnectionState.Open Then .Close()
                .ConnectionString = "datasource=localhost; username=root; password=lani; database=admin"
                .Open()
            End With
        Catch ex As Exception
            MessageBox.Show("Unable to connect", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Application.Exit()
        End Try
    End Sub
#End Region


#Region "LVSettings"
    Sub LVsettings()
        With lvList.Columns
            .Add("book_id", 50, HorizontalAlignment.Left)
            .Add("book_title", 200, HorizontalAlignment.Left)
            .Add("book_author", 200, HorizontalAlignment.Left)
            .Add("isbn", 100, HorizontalAlignment.Left)
            .Add("call_no", 100, HorizontalAlignment.Left)
        End With
    End Sub
#End Region

#Region "object Settings "

    Sub Set1()
        cmdAdd.Enabled = True
        cmdEdit.Enabled = True
        cmddelete.Enabled = True
        cmdExit.Enabled = True

        cmdsave.Enabled = False
        cmdCancel.Enabled = False
        Dim txt As Control
        For Each txt In Me.Controls
            If TypeOf txt Is TextBox Then
                txt.Enabled = False
            End If
        Next

        lvList.Enabled = True
    End Sub

    Sub Set2()
        cmdAdd.Enabled = False
        cmdEdit.Enabled = False
        cmddelete.Enabled = False
        cmdExit.Enabled = False

        cmdsave.Enabled = True
        cmdCancel.Enabled = True

        Dim txt As Control
        For Each txt In Me.Controls
            If TypeOf txt Is TextBox Then
                txt.Enabled = True
            End If
        Next
        lvList.Enabled = False
    End Sub
#End Region

#Region "CLEAR TEXTBOX"
    Sub ClearAlltextBox()
        Dim a As Control
        For Each a In Me.Controls
            If TypeOf a Is TextBox Then
                a.Text = Nothing
            End If
        Next
    End Sub
#End Region



    Private Sub cmdAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAdd.Click
        str = "add"
        Call Set2()
        Call ClearAlltextBox()
        idtxt.Text = "Computer Generated"
        idtxt.Enabled = False
    End Sub

    Private Sub cmdCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCancel.Click
        myConn.Close()
        Me.Close()
        Call Set1()
        Call ClearAlltextBox()

    End Sub

    Private Sub cmdEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdEdit.Click
        If idtxt.Text = "" Then
            MessageBox.Show("Please Select Record to Update", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Else
            str = "edit"
            Call Set2()
            idtxt.Enabled = False
        End If


    End Sub

    Private Sub cmdExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdExit.Click
        Application.Exit()
    End Sub

    Private Sub cmdsave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdsave.Click
        If str = "add" Then
            ''''''ADD NEW RECORD'''''''
            If idtxt.Text = "" Or titletxt.Text = "" Or authortxt.Text = "" Or Pubtxt.Text = "" Or isbntxt.Text = "" Or calltxt.Text Then
                MessageBox.Show("All fields Are Required", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Else
                sqlQry = "INSERT INTO book(book_id,book_title,book_author,book_publisher,isbn,call_no) "
                sqlQry = sqlQry + "VALUES('" & idtxt.Text & "','" & titletxt.Text & "','" & authortxt.Text & "','" & Pubtxt.Text & "','" & isbntxt.Text & "','" & calltxt.Text & "')"
                mycmd = New MySqlCommand
                With mycmd
                    .CommandText = sqlQry
                    .Connection = myConn
                    .ExecuteNonQuery()
                End With
                Call Set1()
            End If

        Else
            ''''''''''UPDATE RECORD'''''''
            If idtxt.Text = "" Or titletxt.Text = "" Or authortxt.Text = "" Or Pubtxt.Text = "" Or isbntxt.Text = "" Or calltxt.Text Then
                MessageBox.Show("All fields Are Required", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Else
                sqlQry = "UPDATE book SET "
                sqlQry = sqlQry + " book_title = '" & titletxt.Text & "',"
                sqlQry = sqlQry + " book_author = '" & authortxt.Text & "',"
                sqlQry = sqlQry + " book_publisher = '" & Pubtxt.Text & "',"
                sqlQry = sqlQry + " isbn = '" & isbntxt.Text & "',"
                sqlQry = sqlQry + " call_no = '" & authortxt.Text & "'"
                sqlQry = sqlQry + " WHERE "
                sqlQry = sqlQry + " book_id = " & idtxt.Text

                mycmd = New MySqlCommand(sqlQry, myConn)
                mycmd.ExecuteNonQuery()
                Call Set1()
            End If
        End If

        Call FillListview()
        Call ClearAlltextBox()

    End Sub

    Private Sub cmddelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmddelete.Click
        If MsgBox("Are you sure you want to delete this record?", MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
            sqlQry = "DELETE FROM book WHERE book_id = " & idtxt.Text
            mycmd = New MySqlCommand(sqlQry, myConn)
            mycmd.ExecuteNonQuery()
        End If
        Call ClearAlltextBox()
        Call FillListview()
    End Sub

    Private Sub lvList_SelectedIndexChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvList.SelectedIndexChanged
        If lvList.SelectedItems.Count > 0 Then
            With lvList.SelectedItems(0)
                idtxt.Text = .Text
                titletxt.Text = .SubItems(1).Text
                authortxt.Text = .SubItems(2).Text
                Pubtxt.Text = .SubItems(3).Text
                isbntxt.Text = .SubItems(4).Text
                calltxt.Text = .SubItems(5).Text
            End With
        End If
    End Sub
End Class

i put myconn.open as shown at line33 but an error occured and says: argument null exception was unhandled. key cannot be null


help i dont know what to do.. thanksss

a Quick glance at your code seems fine. It is with your reader.

Dim dReader As MySqlDataReader = mycmd.ExecuteReader() <----
this is the error im getting it says invalid operation exception was unhandled and must be open and valid --->

Try and change MySqlDataReader line to the following -

Dim dReader As New MySqlDataReader
dReader = mycmd.ExecuteReader

, and see if it helps. I am assuming that MySqlDataReader is a foreign control which was referenced through references?

#Region "FillListView"

    Sub FillListview()
        lvList.Items.Clear()
        sqlQry = "SELECT * from book ORDER BY book_id ASC"
        Dim mycmd As New MySqlCommand(sqlQry, myConn)
        Try
            myConn.Open()
            Dim dReader As MySqlDataReader
            dReader = mycmd.ExecuteReader
            While dReader.Read()
                With lvList
                    .Items.Add(dReader("book_id"))
                    With .Items(.Items.Count - 1).SubItems
                        .Add(dReader("book_title"))
                        .Add(dReader("book_author"))
                        .Add(dReader("book_publisher"))
                        .Add(dReader("isbn"))
                        .Add(dReader("call_no"))
                    End With
                End With
            End While
            dReader.Close()
            myConn.Close()
        Catch ex As MySqlException
        End Try
    End Sub
#End Region

yes i tried what you said as shown above. but when i put the myconn.open its saying the 'null reference exception was unhandled' object reference not set to an instance of an object

im researching and debugging this error for a while now.. just cant figure it out yet.. can you please help me again :D thanksss much

That is it seems because you are trying to open 'myConn' without setting a reference to it -

Dim mycmd As New MySqlCommand(sqlQry, myConn)
Try
myConn.Open()

Set a reference to myConn ABOVE this code as you did with sqlQry and see if that works.

whew!.. it worked..i hav tried try and catch method maybe i dont know wer to put it thenn.. now it worked..thanks much andreret

Only a pleasure. If you have any more problems, please post it under .Net for us, seeing that you are using .Net. Thanks man, and happy coding.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.