Проблема в том, что вы вставляете '@image', когда оно должно быть просто @image. Если вы поставите '', это означает, что вы хотите вставить значение "@image" в поле. Бросьте '', и это должно сработать. Однако я бы также порекомендовал сделать то же самое для Textbox.Text, иначе вы можете получить Sql Injected:
con.Open();
cmd = new SqlCommand("SELECT * FROM ImagePosts", con);
ad = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
ad.Fill(ds);
int id = ds.Tables[0].Rows.Count + 1;
byte[] buffer = File.ReadAllBytes(file);
SqlCommand cmd2 = new SqlCommand("INSERT INTO Images (Id, Title, Image) VALUES('" + id + "', @Title, @image)", con);
cmd2.Parameters.Add("@Title", textBox1.Text);
var binary1 = cmd2.Parameters.Add("@image", SqlDbType.VarBinary, -1);
binary1.Value = buffer;
cmd2.ExecuteNonQuery();
con.Close();
this.Close();
Вы можете даже сделать это с идентификатором.