Sql server 更新记录代码错误

Sql server 更新记录代码错误,sql-server,Sql Server,我得到一个错误: System.Data.dll中发生类型为“System.InvalidCastException”的未处理异常 其他信息:无法将参数值从组合框转换为字符串 我错过了什么 Private Sub cmdUpdate_Click(sender As Object, e As EventArgs) Handles cmdUpdate.Click If txtBursaryR_ID.Text = "" Then MessageBox.Show("Empty

我得到一个错误:

System.Data.dll中发生类型为“System.InvalidCastException”的未处理异常

其他信息:无法将参数值从组合框转换为字符串

我错过了什么

Private Sub cmdUpdate_Click(sender As Object, e As EventArgs) Handles cmdUpdate.Click

    If txtBursaryR_ID.Text = "" Then
        MessageBox.Show("Empty Id")
    Else
        Dim DBcon As SqlConnection

        DBcon = New SqlConnection("Server=.\FGG;Database=CAOOSC_DB;User=sa;Pwd=c0nstella;")

        Dim command As New SqlCommand("UPDATE tbl_Beneficiaries Set BursaryR_ID=@BursaryR_ID,Donor_ID=@Donor_ID,DonorName=@DonorName,Province=@Province,District=@District,First_Name=@First_Name,Last_Name=@Last_Name,Sex=@Sex,Name_of_School=@Name_of_School,School_Address=@School_Address,Grade_Enrolled=@Grade_Enrolled,Prev_School=@Prev_School,Prev_District=@Prev_District,Intake_Year=@Intake_Year,Child_Vulnerability=@Child_Vulnerability,Children_Disabled=@Children_Disabled,Bursary_Provided=@Bursary_Provided,Supplies=@Supplies,GFirst_Name=@GFirst_Name,GLast_Name=@GLast_Name,Contact_Number=@Contact_Number, ", DBcon)

        command.Parameters.Add("@Donor_ID", SqlDbType.NChar).Value = txtDonor_ID
        command.Parameters.Add("@DonorName", SqlDbType.VarChar).Value = cbDonorName.SelectedItem
        command.Parameters.Add("@Province", SqlDbType.VarChar).Value = cbProvince.SelectedItem
        command.Parameters.Add("@District", SqlDbType.VarChar).Value = cbDistrict.SelectedItem
        command.Parameters.Add("@First_Name", SqlDbType.VarChar).Value = txtFirst_Name
        command.Parameters.Add("@Last_Name", SqlDbType.VarChar).Value = txtLast_Name
        command.Parameters.Add("@Sex", SqlDbType.NChar).Value = cbSex.SelectedItem
        command.Parameters.Add("@Name_of_School", SqlDbType.VarChar).Value = txtName_of_School
        command.Parameters.Add("@School_Address", SqlDbType.VarChar).Value = txtAddress
        command.Parameters.Add("@Grade_Enrolled", SqlDbType.NChar).Value = txtGrade_Enrolled
        command.Parameters.Add("@Prev_School", SqlDbType.VarChar).Value = txtPre_School
        command.Parameters.Add("@Prev_District", SqlDbType.VarChar).Value = txtPrev_District.SelectedItem
        command.Parameters.Add("@Intake_Year", SqlDbType.NChar).Value = cbIntake_Year.SelectedItem
        command.Parameters.Add("@Child_Vulnerability", SqlDbType.VarChar).Value = cbChild_Vulnerability.SelectedItem
        command.Parameters.Add("@Children_Disabled", SqlDbType.VarChar).Value = cbChildren_Disabled.SelectedItem
        command.Parameters.Add("@Bursary_Provided", SqlDbType.NChar).Value = cbBursary_Provided.SelectedItem
        command.Parameters.Add("@Supplies", SqlDbType.VarChar).Value = txtSupplies
        command.Parameters.Add("@GFirst_Name", SqlDbType.VarChar).Value = txtGFirst_Name
        command.Parameters.Add("@GLast_Name", SqlDbType.VarChar).Value = txtGLast_Name
        command.Parameters.Add("@Contact_Number", SqlDbType.NChar).Value = txtGContact

        DBcon.Open()

        If command.ExecuteNonQuery() = 1 Then
            MessageBox.Show("Data Updated")
        Else
            MessageBox.Show("Data Not Updated")
        End If

        DBcon.Close()
    End If
End Sub

我猜,您的代码可能正在尝试将参数的值设置为对象,而您想要的是将它们设置为这些对象中的文本值

例如,在第一个示例中,这是:

command.Parameters.Add("@Donor_ID", SqlDbType.NChar).Value = txtDonor_ID
应该更像这样:

command.Parameters.Add("@Donor_ID", SqlDbType.NChar).Value = txtDonor_ID.Text

依此类推。

我猜cbSex.SelectedItem是ComboBox.SelectedItem类型的对象。要从ComboBox.SelectedItem获取字符串值,必须使用SelectedItem.Text或SelectedValue。另外,如果txtDonator_ID是TextBox类型的变量,则必须使用txtDonator_ID.Text。对于所有其他控件,请遵循此操作

txtDonor_ID.Text
cbSex.SelectedItem.Text or  cbSex.SelectedValue

将该错误复制/粘贴到Google时出现了什么?
cbXxx.selecteditem.ToString()
是否有任何值为空?看起来您将组合框的值设置为.selecteditem,我相信这是一个对象,您需要使用.SelectedItem.value或.toString,出于验证目的,最好将值放入字符串中,并将SQL中的值设置为字符串值。因此,在传递给SQL参数之前,您可以先检查这些值是否为空。@Brad感谢您的回答。我认为在将值放入字符串后,系统现在正在检查值,但是我现在得到一个不同的错误,它破坏了我的代码,指示值为空,即使在加载表单后所有文本框和组合框中都有值。显然,我在表单上有两个按钮,一个用于搜索SQL DB中的数据并在表单上显示值,另一个用于放置更新代码以使我能够编辑数据并进行更新。“我该怎么解决?”BrightonIlukena抱歉,这是一个完全不同的问题,应该这样发布。从您发布的代码部分来看,无法判断值为空的原因。这可能是正确的答案,但请您解释一下,以便清楚问题出在哪里?cbSex.SelectedItem.Text用于获取显示文本,cbSex.SelectedValue用于获取内部值。@MoinulIslam非常感谢您的解决方案。我已经设法解决了这个问题,错误似乎已经解决了,但是现在又出现了另一个错误(“CAOSC_APP.exe中发生了未处理的“System.NullReferenceException”类型的异常附加信息:对象引用未设置为对象的实例。”)我如何解决这个问题很难确定哪个对象为null。请阅读异常详细信息和错误抛出行。我认为这有助于你深入挖掘。