Lire des valeurs booléennes à partir de DB?
En C#, à l'aide de SqlDataReader, est-il un moyen de lire une valeur booléenne de la DB?
while (reader.Read())
{
destPath = reader["destination_path"].ToString();
destFile = reader["destination_file"].ToString();
createDir = reader["create_directory"].ToString();
deleteExisting = Convert.ToBoolean(reader["delete_existing"]);
skipIFolderDate = reader["skipifolderdate"].ToString();
useTempFile = reader["useTempFile"].ToString();
password = reader["password"].ToString();
}
Dans le code ci-dessus, delete_existing est toujours 1 ou 0 dans la DB. J'ai lu sur MSDN et Convertir.ToBoolean() n'accepte pas un 1 ou un 0 comme entrée valide. Il n'accepte que vrai ou faux. Est t-il un autre moyen de convertir une valeur en DB pour un bool? Ou dois-je besoin de le faire à l'extérieur de la SqlDataReader?
Aussi, je ne peux pas modifier la DB valeurs, de sorte s'il vous plaît pas de réponses en disant: "Modifier la DB les valeurs de 1 et de 0 pour vrai et faux."
Merci!
OriginalL'auteur Mr. Ant | 2011-05-09
Vous devez vous connecter pour publier un commentaire.
Si le type de
delete_existing
est un sqlserver " bit " de type, vous pouvez faire :ou (mais il va se bloquer si
delete_existing
peut êtreDBNull
)ou mieux, ce onebelow est
DBNull
preuve et retourne faux si la colonne estDBNull
Sinon, si le type de base de données est
int
:ou si c'est un
varchar
3ème solution: je suis en train de jeter reader["delete_existing"] pour nullable booléen (bool?). De cette façon, la conversion échoue et renvoie la valeur null si le champ contient DBNull.De la valeur. Parce que je préfère à obtenir de faux au lieu de cela, je suis en utilisant le ?? qui permet de transformer une valeur nulle à une valeur quelconque (c'est à dire: null ?? 45 = 45). Je l'utilise beaucoup.
2ème solution: je suis en train de faire un direct en fonte pour un bool. Celui-ci va lever une exception si la valeur n'est pas un type booléen. Par exemple, si il est DBNull.De la valeur. C'est pourquoi il doit être utilisé avec not null bits champ de base de données. Il suffit de choisir celui qui correspond à vos besoins ^^ Quel est le type de base de données de delete_existing btw ?
Quelle est la différence si j'utilise un .ToString()? Par exemple... deleteExisting = (reader["delete_existing"].ToString() == "1") ? true : false;
stackoverflow.com/questions/2099900/... il a répondu à ma question ci-dessus. Merci à tous pour votre aide!
OriginalL'auteur Larry
Casting fonctionne:
myVar = (bool)dataReader["macolonne"];
OriginalL'auteur donkz
Comment à ce sujet?
Booléen est probablement les plus faciles type de convertir quelque chose. Voici le 'Y', 'N' version:
OriginalL'auteur Jeffrey L Whitledge
Si vous êtes à l'aide de CAS dans le SÉLECTIONNEZ et que vous voulez utiliser GetBoolean puis utilisez CAST de modifier la colonne à peu avant de le lire.
Pour exemple:
ensuite, vous pouvez utiliser
OriginalL'auteur sree
Essayez de casting? Il devrait automobiles moulées pour un int, je crois, mais vous pouvez essayer explicitement faire lecteur.GetBoolean((int)reader["delete_existing"]);
Je suis désolé, GetBoolean(x), x n'est pas une valeur à convertir bool, mais plutôt un entier qui correspond à la position du domaine de la lecture dans le datareader.
Ce n'est pas ce que votre code indiquant si...
GetBoolean s'attend à un ordinal = index de la colonne pour obtenir.
OriginalL'auteur slandau