0
votes

Impossible de définir la valeur par défaut d'une variable de chaîne sur DBNULL

Ma compréhension est que le type de données string dans vb.net est nullable.

Par conséquent, je ne comprends pas pourquoi le code suivant renvoie la "valeur de dbnull ne peut pas être converti en chaîne"

nom public comme string = dbnull.value

Pour le contexte, j'ai une classe dont les valeurs seront écrites dans une base de données. Lorsque l'objet de la classe est créé, il est possible que toutes ses variables ne disposeraient pas de valeurs. Je veux que les valeurs manquantes soient null dans la base de données, donc jetionne donc de définir la valeur par défaut des variables sur DBNULL comme ci-dessus. Mais cela ne fonctionne pas en raison de l'erreur ci-dessus.


0 commentaires

3 Réponses :


0
votes

dbnull code> ne peut pas être converti en une chaîne, vous devez le tester. Vous pouvez attribuer rien code> à une chaîne, vous pouvez donc utiliser:

    Public name As String = Nothing


1 commentaires

Le lien fourni par @icemanind montre une méthode .tostring () qui renvoie string.empty.



2
votes

dbnull n'est pas vraiment équivalent à rien . C'est une classe. valeur est un champ partagé de l'objet dbnull , qui définit simplement la valeur de valeur à une instance de la DBNULL classe. Vous pouvez voir cela pour vous-même ici .


1 commentaires

À "Convertir" dbnull sur une chaîne, vous devez utiliser dbnull.value.tostring , puisque vous devez tester "code> dbnull afin de déterminer Si cela doit être converti en une chaîne, quelle est la différence entre le faire et le remplacer par rien lors de la sauvegarde sur une chaîne?



0
votes

Pour faire ce que vous voulez avec les écrivies à la base de données, vous pouvez utiliser rien code> pour la valeur, puis lors de la rédaction de la base de données, recherchez-vous YourString n'est rien code> et si oui, définissez la valeur du paramètre sur dbnull.value code>.

Public Class Datum
    Property Name As String = Nothing
End Class

Sub X()
    Dim q As New Datum

    Using cmd As New SqlCommand()
        ' other code...

        cmd.Parameters.Add(New SqlParameter With {.ParameterName = "@Name", .SqlDbType = SqlDbType.NVarChar, .Size = 123})
        If q.Name Is Nothing Then
            cmd.Parameters("@Name").Value = DBNull.Value
        Else
            cmd.Parameters("@Name").Value = q.Name
        End If

        ' other code....
    End Using

End Sub


0 commentaires