VB.NET SQL Server Insert - ExecuteNonQuery: Connection property has not been initialized

前端 未结 5 634
醉话见心
醉话见心 2021-01-20 01:17

In the form load event, I connect to the SQL Server database:

Private Sub AddBook_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles My         


        
5条回答
  •  野趣味
    野趣味 (楼主)
    2021-01-20 01:48

    Pretty much what the error message implies - the Connection property of the SqlCommand object hasn't been assigned to the connection you opened (in this case you called it myConnection).

    Also, a word of advice here. Do some reading on sql parameters - doing sql concatenation from user input without any sanity checks is the way SQL injection attacks happen.

    This is one way to do it:

    Private Sub cmdAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAdd.Click
        Try
            myConnection.Open()
            myCommand = New SqlCommand( _
            "INSERT INTO tblBook(BookCode, BookTitle, Author, PublishingYear, Price, " & _
            "                    EnterDate, CatID, RackID, Amount) " & _
            "VALUES(@bookCode, @bookTitle, @author, @publishingYear, @price, @enterDate, " & _
            "       @catId, @rackId, @amount)")
            myCommand.Connection = myConnection
            with myCommand.Parameters
                .AddWithValue("bookCode", txtBookCode.Text)
                .AddWithValue("bookTitle", txtTitle.Text)
                .AddWithValue("author", txtAuthor.Text)
                .AddWithValue("publishingYear", txtPublishYear.Text)
                .AddWithValue("price", txtPrice.Text)
                .AddWithValue("enterDate", txtEnterDate.Text)
                .AddWithValue("catId", txtCategory.Text)
                .AddWithValue("rackId", txtRack.Text)
                .AddWithValue("amount", txtAmount.Text)
            end with
            myCommand.ExecuteNonQuery()
            MsgBox("The book named '" & txtTitle.Text & "' has been inseted successfully")
            ClearBox()
        Catch ex As Exception
            MsgBox(ex.Message())
        End Try
        myConnection.Close()
    End Sub
    

提交回复
热议问题