You should cross check few points:
1. Your parameter sequence in C# code and store procedure sequence should be same.
2. Your stored procedure input parameter data type and C# code parameter data type should be same.
3. Your parameter data type that is inserting and column data type should be same.
And do some change in c3 code for stored procedure:
try
{
SqlDataAdapter daa = new SqlDataAdapter("select max(idcat) from category", con);
DataSet ds = new DataSet();
daa.Fill(ds, "category");
DataView dvv = new DataView(ds.Tables["category"]);
DateTime date = System.Convert.ToDateTime(dateTimePicker1.Text);
int numsup;
numsup = int.Parse(comboBoxSppNo.Text);
SqlCommand cmd3 = new SqlCommand("insertparts", con);
cmd3.CommandType = CommandType.StoredProcedure;
cmd3.Parameters.AddWithValue("@partnumber", txtPartNo.Text);
cmd3.Parameters.AddWithValue("@description", txtDesc.Text);
cmd3.Parameters.AddWithValue("@date", date);
cmd3.Parameters.AddWithValue("@quantity", txtEntrance.Text);
cmd3.Parameters.AddWithValue("@unitPrice", txtunitprice.Text);
cmd3.Parameters.AddWithValue("@AddnewQty", 0);
cmd3.Parameters.AddWithValue("@untpnewQty", 0);
cmd3.Parameters.AddWithValue("@vat", txtvat.Text);
cmd3.Parameters.AddWithValue("@suppId", numsup);
con.Close();
con.Open();
cmd3.ExecuteNonQuery();
MessageBox.Show("SUCCESSFULL INSERT");
}