首页 > 解决方案 > 如何解决错误必须声明标量变量

问题描述

我在 vb.net 中遇到错误。它显示必须声明标量变量“@FieldDeg”。我只能使用 insertSql 而不是 insertSql2 将数据插入数据库,因为它一直在 FieldDeg 显示错误,任何人都可以帮助处理这些代码。非常感谢。这是我的代码。

Imports System.Data.SqlClient
Public Class CV
    Dim conn As SqlConnection
    Dim cmd As SqlCommand
    Dim cmd2 As SqlCommand
    Dim Genders() As String = {"Male", "Female"}


    Private Sub CV_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        cboGender.Items.AddRange(Genders)
        cboGender.DropDownStyle = ComboBoxStyle.DropDown
        cboGender.SelectedIndex = 0

        OpenFileDialog1.Filter = "Image Files (*.bmp;*.jpg;*.jpeg;*.png)|*.BMP;*.JPG;*.JPEG;*.PNG"

        txtField1.Enabled = False
        txtMajor1.Enabled = False
        txtInstitute1.Enabled = False
        txtGrade1.Enabled = False
        mskGradDate1.Enabled = False

        txtField2.Enabled = False
        txtMajor2.Enabled = False
        txtInstitute2.Enabled = False
        txtGrade2.Enabled = False
        mskGradDate2.Enabled = False

    End Sub

    Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
        Dim insertSql As String
        Dim insertSql2 As String

        conn = New SqlConnection("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Assignment.mdf;Integrated Security=True;Connect Timeout=30")

        insertSql = "Insert into [Personal Information] ([Full Name], [Address], [Phone Number], [Mobile Number], [Email], [Age], [Date of Birth], [Nationality], [Gender], [Marital Status], [IC Or Passport], [Permanent Residence]) Values (@Fullname, @Address, @Phone, @Mobile, @Email, @Age, @DOB, @Nationality, @Gender, @Marital, @IC, @Residence)"

        insertSql2 = "Insert into [Education Background] ([Field of Study Deg], [Major Deg], [Institute Or University Deg], [Grade Deg],[Graduation Date Deg], [Field of Study Dip], [Major Dip], [Institute Or University Dip], [Grade Dip], [Graduation Date Dip]) Values (@FieldDeg, @MajorDeg, @InstituteDeg, @GradeDeg, @GradDateDeg, @FieldDip, @MajorDip, @InstituteDip, @GradeDip, @GradDateDip)"

        If (txtFullname.Text = "" Or txtAddress.Text = "" Or mskPhone.Text = "" Or mskMobile.Text = "" Or txtEmail.Text = "" Or mskAge.Text = "" Or mskAge.Text = "" Or mskDOB.Text = "" Or txtNationality.Text = "" Or txtMarital.Text = "" Or txtIC.Text = "" Or txtPR.Text = "") Then
            MessageBox.Show("Please enter all information for Curriculum Vitae.", "Data Field Cannot Be Empty", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Else
            'open the database connection
            conn.Open()

            'create the command object
            cmd = New SqlCommand(insertSql, conn)
            cmd.Parameters.AddWithValue("@Fullname", txtFullname.Text)
            cmd.Parameters.AddWithValue("@Address", txtAddress.Text)
            cmd.Parameters.AddWithValue("@Phone", mskPhone.Text)
            cmd.Parameters.AddWithValue("@Mobile", mskMobile.Text)
            cmd.Parameters.AddWithValue("@Email", txtEmail.Text)
            cmd.Parameters.AddWithValue("@Age", mskAge.Text)
            cmd.Parameters.AddWithValue("@DOB", mskDOB.Text)
            cmd.Parameters.AddWithValue("@Nationality", txtNationality.Text)
            cmd.Parameters.AddWithValue("@Gender", cboGender.Text)
            cmd.Parameters.AddWithValue("@Marital", txtMarital.Text)
            cmd.Parameters.AddWithValue("@IC", txtIC.Text)
            cmd.Parameters.AddWithValue("@Residence", txtPR.Text)

            cmd2 = New SqlCommand(insertSql2, conn)
            cmd.Parameters.AddWithValue("@FieldDeg", txtField1.Text)
            cmd.Parameters.AddWithValue("@MajorDeg", txtMajor1.Text)
            cmd.Parameters.AddWithValue("@InstituteDeg", txtInstitute1.Text)
            cmd.Parameters.AddWithValue("@GradeDeg", txtGrade1.Text)
            cmd.Parameters.AddWithValue("@GradDateDeg", mskGradDate1.Text)
            cmd.Parameters.AddWithValue("@FieldDip", txtField2.Text)
            cmd.Parameters.AddWithValue("@MajorDip", txtMajor2.Text)
            cmd.Parameters.AddWithValue("@InstituteDip", txtInstitute2.Text)
            cmd.Parameters.AddWithValue("@GradeDip", txtGrade2.Text)
            cmd.Parameters.AddWithValue("@GradDateDip", mskGradDate2.Text)

            'executes the INSERT SQL statement
            Dim status As Integer = cmd.ExecuteNonQuery()
            Dim status2 As Integer = cmd2.ExecuteNonQuery()
            If status > 0 And status2 > 0 Then
                MessageBox.Show("Curriculum Vitae has been recorded successfully", "CV Recorded", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                MessageBox.Show("Curriculum Vitae cannot be recorded. Please check the cv details.", "CV Record Failed", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
            conn.Close()  'close the connection
        End If
    End Sub

    Private Sub btnBrowse_Click(sender As Object, e As EventArgs) Handles btnBrowse.Click
        OpenFileDialog1.ShowDialog()
        Pic.ImageLocation = OpenFileDialog1.FileName
    End Sub

    Private Sub chkDegree_CheckedChanged(sender As Object, e As EventArgs) Handles chkDegree.CheckedChanged
        If chkDegree.Checked Then
            txtField1.Enabled = True
            txtMajor1.Enabled = True
            txtInstitute1.Enabled = True
            txtGrade1.Enabled = True
            mskGradDate1.Enabled = True
        Else
            txtField1.Enabled = False
            txtMajor1.Enabled = False
            txtInstitute1.Enabled = False
            txtGrade1.Enabled = False
            mskGradDate1.Enabled = False
        End If
    End Sub

    Private Sub chkDiploma_CheckedChanged(sender As Object, e As EventArgs) Handles chkDiploma.CheckedChanged
        If chkDiploma.Checked Then
            txtField2.Enabled = True
            txtMajor2.Enabled = True
            txtInstitute2.Enabled = True
            txtGrade2.Enabled = True
            mskGradDate2.Enabled = True
        Else
            txtField2.Enabled = False
            txtMajor2.Enabled = False
            txtInstitute2.Enabled = False
            txtGrade2.Enabled = False
            mskGradDate2.Enabled = False
        End If
    End Sub
End Class

标签: vb.net

解决方案


顺便说一句,您正在“检查”子例程可以简化如下:

Private Sub chkDiploma_CheckedChanged(sender As Object, e As EventArgs) Handles chkDiploma.CheckedChanged
    txtField2.Enabled = chkDiploma.Checked
    txtMajor2.Enabled = chkDiploma.Checked
    txtInstitute2.Enabled = chkDiploma.Checked
    txtGrade2.Enabled = chkDiploma.Checked
    mskGradDate2.Enabled = chkDiploma.Checked
End Sub

推荐阅读