'Не удалось преобразовать значение параметра из строки в Int32 / - PullRequest
0 голосов
/ 08 апреля 2020

Я уже разместил этот вопрос, но теперь в деталях. Я пытаюсь вставить дату из базы данных Vb. net в SQL. Но когда я нажимаю кнопку "Вставить", отображается сообщение об ошибке выше. Мне нужна ваша помощь. Спасибо.

Я пытался долгое время вставлять данные разными способами, но постоянно терпели неудачу.

'Sql Database table data type is below.
';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Userid  int Checked
EmpSalary   int Checked
EmpName varchar(50) Checked
FatherName  varchar(50) Checked
EmailAddress    varchar(50) Checked
BankAccount int Checked
HomeAddress varchar(50) Checked
PersonalMobile  int Checked
DateofBirth date    Checked
EmpImage    image   Checked
';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
'My Vb.net insert Query Code is below.

    Public Sub ExecuteMyQuery(cmd As SqlCommand, MyMessage As String)
        con.Open()
        If cmd.ExecuteNonQuery = 1 Then
            MessageBox.Show(MyMessage)
        Else
            MessageBox.Show("Query Not Execute")

        End If
        con.Close()
    End Sub
 Dim insertquery As String = "Insert into AddNew(Userid,EmpSalary,EmpName,FatherName,EmailAddress,BankAccount,HomeAddress,PersonalMobile,DateofBirth,EmpImage) values(@EmpID,@EmpSalary,@EmpName,@FatherName,@EmailAddress,@BankAccount,@HomeAddress,@PersonalMobile,@DtpDOB,@img)"

   Dim cmd As New SqlCommand(insertquery, con)

        cmd.Parameters.Add("@EmpID", SqlDbType.Int).Value = EmpID.Text
        cmd.Parameters.Add("@EmpSalary", SqlDbType.Int).Value = EmpSalary.Text
        cmd.Parameters.Add("@EmpName", SqlDbType.VarChar).Value = EmpName.Text
        cmd.Parameters.Add("@FatherName", SqlDbType.VarChar).Value = FatherName.Text
        cmd.Parameters.Add("@EmailAddress", SqlDbType.VarChar).Value = EmailAddress.Text
        cmd.Parameters.Add("@BankAccount", SqlDbType.Int).Value = BankAccount.Text
        cmd.Parameters.Add("@HomeAddress", SqlDbType.VarChar).Value = HomeAddress.Text
        cmd.Parameters.Add("@PersonalMobile", SqlDbType.Int).Value = PersonalMobile.Text
        cmd.Parameters.Add("@DtpDOB", SqlDbType.Date).Value = DtpDOB.Value
        cmd.Parameters.Add("@img", SqlDbType.Image).Value = img

        ExecuteMyQuery(cmd, "Saved Your Data Successful")

    End Sub

1 Ответ

0 голосов
/ 08 апреля 2020

Дайте этому go:

Dim r as New Regex("[^0-9]")

cmd.Parameters.Add("@EmpID", SqlDbType.Int).Value = r.Replace(EmpID.Text, "")
cmd.Parameters.Add("@EmpSalary", SqlDbType.Int).Value = r.Replace(EmpSalary.Text, "")
cmd.Parameters.Add("@EmpName", SqlDbType.VarChar).Value = EmpName.Text
cmd.Parameters.Add("@FatherName", SqlDbType.VarChar).Value = FatherName.Text
cmd.Parameters.Add("@EmailAddress", SqlDbType.VarChar).Value = EmailAddress.Text
cmd.Parameters.Add("@BankAccount", SqlDbType.Int).Value = r.Replace(BankAccount.Text, "")
cmd.Parameters.Add("@HomeAddress", SqlDbType.VarChar).Value = HomeAddress.Text
cmd.Parameters.Add("@PersonalMobile", SqlDbType.Int).Value = r.Replace(PersonalMobile.Text, "")
cmd.Parameters.Add("@DtpDOB", SqlDbType.Date).Value = DtpDOB.Value
cmd.Parameters.Add("@img", SqlDbType.Image).Value = img

Он удаляет не числа, присутствующие в текстовых полях, что означает, что преобразование должно быть успешным.

Однако было бы лучше ) Используйте a MaskedTextBox , a NumericUpDown или текстовое поле, которое отклоняет не числа и б), преобразуйте текст в int самостоятельно, чтобы вы могли обрабатывать его в случае сбоя, используя красивое сообщение об ошибке:

Try
    cmd.Parameters.Add("@EmpID", SqlDbType.Int).Value = Convert.ToInt32(EmpID.Text)
    cmd.Parameters.Add("@EmpSalary", SqlDbType.Int).Value = Convert.ToInt32(EmpSalary.Text)
    ...
Catch ex as Exception
    'the last added parameter is the one that hit the problem
    MessageBox.Show($"Error adding a value for {cmd.Parameters.Last().ParameterName}")
End Try
...