Paramètre facultatif Sqldatareader

ado.net asp.net c# dapper sqldatareader

Question

J'ai un lecteur de données qui obtient des résultats de ma procédure stockée. La procédure stockée en fonction de certaines valeurs telles que ("ismarried" = true) renvoie 10 Coulmns mais si ("ismarried" = false) elle ne renvoie que 5 colonnes.

Dans ma page asp.net, mon lecteur de données attend 10 colonnes, peu importe ce que je voulais et je voulais savoir s'il y avait un moyen dans mon code asp.net c # d'avoir des paramètres optionnels. Je sais que vous pouvez utiliser ISNULL ("Column", "") dans SQL mais au lieu de le faire, j'espérais qu'il y avait un moyen de dire à mon lecteur que ces 5 paramètres n'existaient pas toujours.

Merci

Réponse acceptée

Vous pouvez indiquer le nombre de colonnes renvoyées par la procédure stockée à l'aide de la propriété FieldCount . Si elle renvoie 5 ou 10, votre code peut réagir en conséquence.


Réponse populaire

Au lieu de vérifier les colonnes renvoyées, puis de les cartographier en fonction du nombre de champs, etc., une solution plus propre consisterait à créer une classe, disons Person like so ...

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool IsMarried { get; set; }
    //etc...
}

Ensuite, vous pouvez utiliser dapper pour renvoyer votre résultat ...

var people = cnn.Query<Person>("spName", 
                     commandType: CommandType.StoredProcedure).ToList();

dapper mappera les champs à votre propriété de classe et ignorera les champs manquants. Sachez que les noms de propriété devront correspondre aux noms de champs de la base de données. Cela permettra de réduire toute vérification logique et de mapper chaque propriété à la main sur le champ renvoyé.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi