参数数据类型与数据库数据类型

本文关键字:数据类型 数据库 参数 | 更新日期: 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;

这也适用于其他文本框。