[MySQL] Ungültige Konvertierung von Typ DBNull in Typ String.

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Samtrion.

    [MySQL] Ungültige Konvertierung von Typ DBNull in Typ String.

    Hallo Vb-Paradise,

    erstmal Hallo an alle,ich hab ein problem mit meinem Projekt (Ein Emulator) und zwar kommt dieser Fehler:

    System.InvalidCastException: Ungültige Konvertierung von Typ DBNull in Typ String.

    Dieser Fehler sagt auch, dass es bei "CadeauManager" liegt Zeile 19, hier mal ein ausschnit wo die Zeile ist:
    PublicSharedFunction GetListCadeauxByID(ByVal ID AsInteger)
    Dim Data1 AsStringSyncLockSql.AccountsSync
    Dim Temporaire AsInteger = ID
    Dim SQLText AsString = "SELECT * FROM player_accounts WHERE id=@Temporaire"Dim SQLCommand AsNewMySqlCommand(SQLText, Sql.Accounts)
    SQLCommand.Parameters.Add(NewMySqlParameter("@Temporaire", Temporaire))Dim Result = SQLCommand.ExecuteReader
    If Result.Read Then
    Data1 = Result("IDSCadeaux") <- Zeile 19!
    Else
    Data1 = 0
    EndIf
    Und hier ist die Account-Tabelle:

    Würde mich über hilfe richtig freuen.
    Lg, Sahino. :S
    Tja, in der Datenbankwelt gibt es einen unterschied zwischen

    Dim lString as String = "" oder Dim lString as String = string.Empty und DbNull.

    Die ersten beiden Varianten sind ein String, allerdings mit 0 Zeichen. DbNull ist nicht mal ein String. Mit DbNull wird in der Datenbank Platz gespart und das erhöht die Perfornace.

    Du musst also vor dem Konvertieren immer prüfen, ob in der Zelle ein richtiger Wert drin ist, oder eben DbNull.
    Du hast eine String-Variable definiert, und versuchst nun dieser Variable ein Nichts zu zuweisen. Das geht aber nicht. Einer String-Variable darfst Du nur ein String zu weisen, und sonst nichts. Auch wenn es sich nur um einen leeren String handelt. Ein leerer String ist nicht Nichts. DbNull ist aber nichts.

    Wenn Du also versuchst einer Variable einen Wert aus einer Zelle einer Datenbank-Tabelle zu zuweisen, musst Du erst prüfen, ob die Zelle auch einen Wert hat.

    Hier gibt es ein schönes Beispiel.
    Hallo sahino,

    du musst bevor du deinen Wert in Data1 schreibst, überprüfen ob dieser DBNull ist, dafür hast du folgende Möglichkeit zur Verfügung.

    VB.NET-Quellcode

    1. If Not DbNull.Value.Equals(Result("IDSCadeaux")) Then
    2. Data1 = Result("IDSCadeaux").ToString
    3. Else
    4. Data1 = String.Empty
    5. End If

    MSDN DBNull-Klasse



    Als Beispiel, damit dir der Unterschied zwischen Nothing und DBNull etwas klarer wird.

    VB.NET-Quellcode

    1. 'Standard Integer deklaration
    2. 'Inhalt der Variable 0
    3. Dim intWert1 AS Integer = 0
    4. 'Inhalt der Variable 0 (Interner Nothing Wert von Integer)
    5. Dim intWert2 AS Integer = Nothing
    6. 'Deklaration als System.Nullable Integer
    7. 'Hierbei ist zu sagen, Integer? entspricht System.Nullable(Of Integer)
    8. 'Inhalt der Variable 0
    9. Dim intWert3a AS Integer? = 0
    10. 'Inhalt der Variable 0
    11. Dim intWert3b AS System.Nullable(Of Integer) = 0
    12. 'Inhalt der Variable DBNull, sprich die Variable hat keinen Wert
    13. Dim intWert3a AS Integer? = Nothing
    14. 'Inhalt der Variable DBNull, sprich die Variable hat keinen Wert
    15. Dim intWert3b AS System.Nullable(Of Integer) = Nothing

    MSDN System.Nullable(T)