J'ai écrit une méthode pour charger des données d'un utilisateur à partir d'une DB. Mon datarow Linha est annulée, je ne peux donc pas lire ces données. Quelle est la bonne façon de lire cette ligne? VisualStudio 2019 C # P> P>
5 Réponses :
au lieu de linha ["m.crm"] code> Essayez d'utiliser linha ["CRM"] code>. P>
m.crm code> utilisé dans l'instruction SQL ne fait que partie de la commande SQL Select exécutée dans SQL Server, et le résultat de cette sélection (le jeu de données) contient CRM code> Sans l'alias de table m. code> comme nom de colonne. P>
Vous devez passer de à p> car comme Steve mentionné dans les commentaires, dbnull.value doit être utilisé avec Valeurs de colonne NON ROWS P> P>
Vous avez besoin de changement dans deux endroits. 1. Changez la condition IF. Reportez-vous à DBNULL Documentation 2 . Supprimer m. code> des noms de champ
Vous ne pouvez pas tester la ligne entière contre dbnull. Vous devez tester les champs individuels ou, au moins dans ce contexte, au moins le champ ID.
Il y a un Datarow.isnull (nom de terrain) p> avis que vous n'avez pas besoin du préfixe d'alias une fois que les données sont dans les lignes de données. P> dit que, il y a un autre problème grave dans votre requête. Vous êtes concaténant une chaîne pour créer une commande SQL. Ceci est un problème bien connu menant aux hacks d'injection SQL et aux erreurs d'analyse. Vous devez utiliser des paramètres comme ici: p>
Vous pouvez vérifier vos champs sur null code> et après vérification, vous pouvez créer un objet en toute sécurité: var id = linha["id"];
var nom = linha["nome"];
var crm = linha["crm"];
var habilitado = linha["habilitado"];
if (id != null && nom != null && crm != null && habilitado != null)
{
this.Medico = new MedicoModel((int)id, nom.ToString(),
crm.ToString(), (bool)habilitado);
}
Vous ne pouvez pas tester toute la ligne contre Dbnull. Vous devez tester les champs individuels. Il y a un < i> datarow.isnull (nom de terrain) i>