'将参数值从 String 转换为 Int32 失败/ [英] 'Failed to convert parameter value from a String to a Int32/
问题描述
我已经发布了这个问题,但现在详细介绍一下.我试图将日期从 Vb.net 插入 SQL 数据库但是当我单击插入按钮然后显示上面的错误消息时.我需要你的帮助谢谢.
I have already post this question but now in details. I have trying to insert Date from Vb.net to SQL Database But when i click insert Button then show me above error message.I need your help Thanks.
我已经尝试了很长时间以多种方式插入数据,但一直失败.
'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
推荐答案
试一试:
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
它会去除文本字段中存在的非数字,这意味着转换应该成功..
It strips out non numbers present in text fields, meaning the conversion should succeed..
不过,最好 a) 使用 一个 MaskedTextBox,a NumericUpDown 或 拒绝非数字的文本框 和 b) 自己将文本转换为 int,以便您可以在失败时使用漂亮的错误消息进行处理:
It would, however be better to a) Use a MaskedTextBox, a NumericUpDown or a textbox that rejects non-numbers and b) convert the text to int yourself so you can handle if it fails, using a nice error message:
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
这篇关于'将参数值从 String 转换为 Int32 失败/的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!