参数数据类型与数据库数据类型
本文关键字:数据类型 数据库 参数 | 更新日期: 2023-09-27 18:29:36
关于参数SQL数据类型?
在我的SQL Server数据库表中,我在那里定义了数据类型。
我的问题是,在参数和数据库数据类型中,它们应该是相同的数据类型,对吗?
示例Enumber
数据类型在SQL Server中为INT
,而在参数SqlDataType
中也是INT
?
但当我运行它时,它说数据类型需要将字符串转换为int32?
我的数据类型有问题吗?
学生
// Adding data to table Employee from database
cmd.CommandText = "Insert into Employee(Enumber,Inumber,Pnumber,Fname,Mname,Sname,Age,Bdate,Gender,Mstatus,Nationality,Eaddress,Cnumber,Picture) Values (@Enumber,@Inumber,@Pnumber,@Fname,@Mname,@Sname,@Age,@Bdate,@Gender,@Mstatus,@Nationality,@Eaddress,@Cnumber,@Picture)";
cmd.Parameters.Add("@Enumber",SqlDbType.Int).Value = txtEnumber.Text;
cmd.Parameters.Add("@Inumber",SqlDbType.Int).Value = txtInumber.Text;
cmd.Parameters.Add("@Pnumber",SqlDbType.VarChar,20).Value = txtPassport.Text;
cmd.Parameters.Add("@Fname",SqlDbType.VarChar,50).Value = txtFname.Text;
cmd.Parameters.Add("@Mname",SqlDbType.VarChar,50).Value = txtMname.Text;
cmd.Parameters.Add("@Sname",SqlDbType.VarChar,50).Value = txtSname.Text;
cmd.Parameters.Add("@Age", SqlDbType.Int).Value = txtAge.Text;
cmd.Parameters.Add("@Bdate",SqlDbType.VarChar).Value = DtpBdate.Text;
cmd.Parameters.Add("@Gender",SqlDbType.VarChar,20).Value = cbGender.Text;
cmd.Parameters.Add("@Mstatus",SqlDbType.VarChar,20).Value = cbMstatus.Text;
cmd.Parameters.Add("@Nationality",SqlDbType.VarChar,30).Value = txtNationality.Text;
cmd.Parameters.Add("@Eaddress",SqlDbType.VarChar,50).Value = txtEAddress.Text;
cmd.Parameters.Add("@Cnumber",SqlDbType.Int).Value = txtCnumber.Text;
cmd.Parameters.Add("@Picture",SqlDbType.VarChar).Value = ImageToBase64(PbImage.Image, System.Drawing.Imaging.ImageFormat.Jpeg);
cmd.ExecuteNonQuery();
此错误是由用于填充Int参数的一个或多个TextBox为空引起的。在这种情况下,试图转换分配给Int参数的字符串值的内部代码将失败。这种情况只在执行时发生,而不是在指定时发生,因为Parameter.Value属性被定义为对象。
一种可能的解决方法是
cmd.CommandText = "Insert into Employee(Enumber,Inumber,Pnumber,.....)";
cmd.Parameters.Add("@Enumber",SqlDbType.Int).Value =
string.IsNullOrWhiteSpace(txtEnumber.Text) ? "0" : txtEnumber.Text ;
但这不是一个好的解决方案,因为用户可以在这些文本框中键入任何内容。因此,您确实应该在尝试插入之前添加一个验证级别,并添加一个实整数作为值。
int enumber;
if(!Int32.TryParse(txtENumber.Text, out enumber))
{
MessageBox.Show("Type a number");
return;
}
cmd.Parameters.Add("@Enumber",SqlDbType.Int).Value = enumber;
这也适用于其他文本框。