La façon de traiter avec SqlDataReader des valeurs null dans VB.net
J'ai la forme suivante de code qui effectue une requête et retourne un résultat. Cependant, j'ai regardé autour et a trouvé quelques exemples à prendre soin de valeurs nulles mais j'obtiens une erreur: "Invalid tentative de lecture lorsque aucune donnée n'est présente." J'ai aussi eu l'erreur: "la Conversion de type DBNull de type "Virgule" n'est pas valide."
Quelqu'un peut-il m'aider à sortir de ce code afin de prévenir les valeurs null à partir de la plante de mon programme?
Private Sub EFFICIENCY_STACKRANK_YTD(ByVal EMPLOYEE As String)
Dim queryString As String = "SELECT " & _
" (SELECT CAST(SUM(TARGET_SECONDS) AS DECIMAL)/CAST(SUM(ROUTE_SECONDS) AS DECIMAL) FROM dbo.APE_BUSDRIVER_MAIN WITH(NOLOCK) WHERE APE_AREA_OBJID = " & lblAreaOBJID.Text & " AND EMPLOYEE_NAME = '" & EMPLOYEE & "' AND YEAR_TIME = '" & cbYear.Text & "' AND ACTIVE = 1) AS RESULT1" & _
" FROM dbo.APE_BUSDRIVER_MAIN "
Using connection As New SqlConnection(SQLConnectionStr)
Dim command As New SqlCommand(queryString, connection)
connection.Open()
Dim reader As SqlDataReader = command.ExecuteReader()
If reader.Read Then
RESULT1 = reader("RESULT1")
Else
RESULT1 = 0
End If
End Using
End Sub
Lire ma réponse à votre question. Le code permet de gérer efficacement cette déjà.
OriginalL'auteur Joseph.Scott.Garza | 2013-12-31
Vous devez vous connecter pour publier un commentaire.
Vous avez ouvert le lecteur, mais ne lui avez pas demandé de lire quoi que ce soit.
Après cette ligne:
ajouter
et envelopper le résultat de lecture en ce que si l'énoncé, c'est à dire
Notez que cela fonctionne parce que votre SQL ne doit renvoyer qu'à un seul enregistrement. Dans le cas où vous étiez en train de lire plusieurs enregistrements, vous devez appeler l'instruction de Lecture en boucle jusqu'à ce qu'il n'y avait pas plus de disques, c'est à dire
OriginalL'auteur competent_tech
J'ai voulu donner une autre, plus avancé, répondre en tant qu'option. Le nombre de classes peut être prolongée .NET comme ça.
Si vous êtes régulièrement en spectacle "Est NULL" vérifications de ce genre dans vos applications, vous pouvez choisir de prolonger la classe DataReader une fois d'avoir des fonctions supplémentaires disponibles partout dans votre application. Voici un exemple qui crée une extension appelée "ReadNullAsString()" sur le lecteur de données de classe. Cela fait une fonction qui renvoie toujours une Chaîne.Vide lorsqu'un DbNull est rencontré.
Partie 1, place ce module de code dans un nouveau fichier de classe dans App_Code, si la demande est un site web, autrement endroit où jamais vous préférez. Il y a deux surcharges, l'un pour le champ de la position ordinale (aka index), et un pour le domaine de l'ColumnName.
L'étape 2, l'appel de la nouvelle extension de la sorte:
OriginalL'auteur laylarenee