我试图将数据插入数据库
但按下按钮后会显示错误信息
无法将参数值从String转换为Int32。
我需要帮助
我不知道该怎么做了。谢谢!
private void InsertNewRecord()
{
SqlCommand cmdInsert = new SqlCommand();
cmdInsert.Connection = cn;
cmdInsert.CommandType = CommandType.Text;
cmdInsert.CommandText = "INSERT INTO Customers (" +
" LastName, FirstName, MiddleName, ContactNumber, EmailAddress, BirthDate, CompanyName, Address, BillingAddress, CustomerStatus, CustPicture" +
") VALUES (" +
" @LastName, @FirstName, @MiddleName, @ContactNumber, @EmailAddress, @BirthDate, @CompanyName, @Address, @BillingAddress, @CustomerStatus, @CustPicture" +
") ";
cmdInsert.Parameters.Add("@LastName", SqlDbType.VarChar, 50).Value = txtLastName.Text;
cmdInsert.Parameters.Add("@FirstName", SqlDbType.VarChar, 50).Value = txtFirstName.Text;
cmdInsert.Parameters.Add("@MiddleName", SqlDbType.VarChar, 50).Value = txtMiddleName.Text;
cmdInsert.Parameters.Add("@ContactNumber", SqlDbType.Int).Value = txtContactNumber.Text;
cmdInsert.Parameters.Add("@EmailAddress", SqlDbType.VarChar, 100).Value = txtEmailAddress.Text;
cmdInsert.Parameters.Add("@BirthDate", SqlDbType.Date).Value = dtpBirthdate.Value;
cmdInsert.Parameters.Add("@CompanyName", SqlDbType.VarChar, 50).Value = txtCompanyName.Text;
cmdInsert.Parameters.Add("@Address", SqlDbType.VarChar, 100).Value = txtAddress.Text;
cmdInsert.Parameters.Add("@BillingAddress", SqlDbType.VarChar, 100).Value = txtBillingAddress.Text;
cmdInsert.Parameters.Add("@CustomerStatus", SqlDbType.VarChar, 10).Value = cboCustomerStatus.Text;
Image bmp;
System.IO.MemoryStream ms;
if (PicImage.Image == null)
{
bmp = Bitmap.FromFile(Application.StartupPath + @"\Anonymous.jpg"); //read the default picture
ms = new System.IO.MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); //put it in the memory stream
cmdInsert.Parameters.Add("@CustPicture", SqlDbType.Image).Value = ms.GetBuffer(); //add it as the value of custpictureparameter.
}
else
{
bmp = Bitmap.FromFile(openFileDialog1.FileName);
ms = new System.IO.MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
cmdInsert.Parameters.Add("@CustPicture", SqlDbType.Image).Value = ms.GetBuffer();
}
cmdInsert.ExecuteNonQuery();
Console.WriteLine("Successfully added row to Customers table!");
} //end of InsertNewRecord()
}
答案 0 :(得分:3)
即使没有单步执行代码,这可能表明错误在哪里,我几乎可以保证它在这一行:
cmdInsert.Parameters.Add("@ContactNumber", SqlDbType.Int).Value = txtContactNumber.Text;
你说参数是一个整数,你传递一个字符串。您需要将txtContactNumber.Text
的值转换为整数。
尝试int.Parse
或最好int.TryParse
。
答案 1 :(得分:0)
您需要将ContactNumber转换为整数。
int contactNumber;
Int32.TryParse(ContactNumber.Text, out contactNumber);
然后添加:
cmdInsert.Parameters.Add("@ContactNumber", SqlDbType.Int).Value = contactNumber;
答案 2 :(得分:0)
其他答案不正确。如果值格式正确,则会自动转换该参数。
来自MSDN:
如果应用程序指定数据库类型,则在提供程序将数据发送到服务器时,绑定值将转换为该类型。如果提供程序支持IConvertible接口,则它会尝试转换任何类型的值。如果指定的类型与值不兼容,则可能导致转换错误。
因此请确保文本框中没有空格:
cmdInsert.Parameters.Add("@ContactNumber", SqlDbType.Int).Value = txtContactNumber.Text.Trim();