Vous voulez la méthode SqlCommandBuilder.DeriveParameters(SqlCommand). Notez qu'il nécessite un aller-retour supplémentaire vers la base de données, il s'agit donc d'un impact assez important sur les performances. Vous devriez envisager de mettre les résultats en cache.
Un exemple d'appel :
using (SqlConnection conn = new SqlConnection(CONNSTRING))
using (SqlCommand cmd = new SqlCommand("StoredProc", conn)) {
cmd.CommandType = CommandType.StoredProcedure;
SqlCommandBuilder.DeriveParameters(cmd);
cmd.Parameters["param1"].Value = "12345";
// ....
}