Database 错误对象引用未设置为vb中对象的实例

Database 错误对象引用未设置为vb中对象的实例,database,vb.net,sqlclient,Database,Vb.net,Sqlclient,我有个问题。运行项目时,单击“保存”按钮后,将显示此错误消息 以下是项目代码 Imports System.Data.SqlClient 公共类frmAddNewStaffAdmin Dim con As SqlClient.SqlConnection Dim dbSource As String Dim cmd As SqlClient.SqlCommand Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e A

我有个问题。运行项目时,单击“保存”按钮后,将显示此错误消息

以下是项目代码

Imports System.Data.SqlClient
公共类frmAddNewStaffAdmin

Dim con As SqlClient.SqlConnection
Dim dbSource As String
Dim cmd As SqlClient.SqlCommand

Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
    Try
        If Len(Trim(cboRole.Text)) = 0 Then
            MessageBox.Show("Please select user type", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            cboRole.Focus()
            Return
        ElseIf Len(Trim(txtStaffID.Text)) = 0 Then
            MessageBox.Show("Please enter Staff ID", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            txtStaffID.Focus()
            Return
        ElseIf Len(Trim(txtStaffName.Text)) = 0 Then
            MessageBox.Show("Please enter Staff Name", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            txtStaffName.Focus()
            Return
        ElseIf Len(Trim(txtUsername.Text)) = 0 Then
            MessageBox.Show("Please enter Username", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            txtUsername.Focus()
            Return
        ElseIf Len(Trim(txtPassword.Text)) = 0 Then
            MessageBox.Show("Please enter Password", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            txtPassword.Focus()
            Return

        End If

        dbSource = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\HMS.mdf;Integrated Security=True;User Instance=True"

        con = New SqlConnection(dbSource)

        con.Open()

        Dim sql As String = "INSERT INTO [User] ([Staff_ID], [Staff_Role], [Staff_Name], [Username], [Password]) VALUES (@StaffID, @Role, @StaffName, @Username, @Password) "

        cmd.Connection = con

        cmd.ExecuteNonQuery()

        cmd.Parameters.AddWithValue("@Staff_ID", txtStaffID.Text)
        cmd.Parameters.AddWithValue("@Role", cboRole.Text)
        cmd.Parameters.AddWithValue("@StaffName", txtStaffName.Text)
        cmd.Parameters.AddWithValue("@Username", txtUsername.Text)
        cmd.Parameters.AddWithValue("@Password", txtPassword.Text)

        cmd = New SqlCommand(sql)


        MessageBox.Show("Successfully saved", "Record", MessageBoxButtons.OK, MessageBoxIcon.Information)

        con.Close()



    Catch ex As Exception
        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try

End Sub

Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click

    Me.Hide()
    frmStaffAdmin.Show()

End Sub

末级

您的代码顺序不正确。在初始化之前使用SqlCommand,当然这会导致上述错误

    dbSource = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\HMS.mdf;Integrated Security=True;User Instance=True"

    con = New SqlConnection(dbSource)

    con.Open()

    Dim sql As String = "INSERT INTO [User] ([Staff_ID], [Staff_Role], [Staff_Name], [Username], [Password]) VALUES (@StaffID, @Role, @StaffName, @Username, @Password) "

    cmd = New SqlCommand(sql)

    cmd.Connection = con
    cmd.Parameters.AddWithValue("@StaffID", txtStaffID.Text)
    cmd.Parameters.AddWithValue("@Role", cboRole.Text)
    cmd.Parameters.AddWithValue("@StaffName", txtStaffName.Text)
    cmd.Parameters.AddWithValue("@Username", txtUsername.Text)
    cmd.Parameters.AddWithValue("@Password", txtPassword.Text)

    cmd.ExecuteNonQuery()

    MessageBox.Show("Successfully saved", "Record", MessageBoxButtons.OK, MessageBoxIcon.Information)

    con.Close()

在第一次使用之前移动了SqlCommand的初始化,并将ExecuteOnQuery作为最后一条指令移动

引发异常的行是什么?那一行的什么参考是
?它很可能是点之前的某个东西,虽然不能保证是。我做断点。更改命令后,错误从cmd.ExecuteNonQuery()行开始。我得到这个错误“必须在”@StaffID处声明标量变量”“参数占位符是
@StaffID
,参数名称是
@Staff\u ID
,它们必须相同。”。应答更新数据已成功保存,但未插入数据库中的数据。为什么?tq回答我的问题如果数据被插入或没有插入,你看起来怎么样?是否在Visual Studio中使用服务器资源管理器窗口?是。我在visual studio中使用基于服务器的数据库。我从数据连接>HMS.mdf>表>用户>右键单击>显示表数据中查找数据