SQLParameter wurde nicht bereitgestellt, obwohl vorhanden?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    SQLParameter wurde nicht bereitgestellt, obwohl vorhanden?

    Ich bekomme beim Hinzufügen von dem unteren SQLParameter einen Fehler.

    VB.NET-Quellcode

    1. .AddWithValue("@straße", Benutzer.Straße)


    Ändere ich dies testweise zu:

    VB.NET-Quellcode

    1. .AddWithValue("@straße", "")


    Kommt dieser Fehler nicht mehr, aber an sich ist das doch dasselbe?
    Straße ist eine String Eigenschaft vom Benutzer, die ist standardmäßig sowieso String.Empty.

    Warum kommt dort ein Fehler, aber bei der direkten Angabe von "", oder String.Empty nicht?

    Folgender Fehler erscheint:
    "Die parametrisierte Abfrage '(... andere Parameter.)' erwartet den @straße Parameter, der nicht bereitgestellt wurde.
    Obwohl er durch ersteres Beispiel doch drin ist, auch wenn er ein Empty String ist?

    *Topic verschoben*
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Es liegt aber nicht zufällig am "ß"?

    Ich halte es für einen schlechten Programmierstil, Nicht-ASCII-Zeichen im Code zu verwenden (außer in Strings und Kommentaren).
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Ich hab jetzt mal anderweitig getestet.

    Bisher war ich der Meinung, dass Properties innerhalb einer Klasse mit angegebenen leeren Konstruktor automatisch ihren Standardwert zugewiesen bekommen (also bei Wertetypen).
    Wobei ich mich jetzt aber auch gerade verlaufen könnte, ich meine letztens gelesen zu haben, dass ein String auch ein Referenztyp ist?
    Da fällt mir die Klausel von MSDN ein "alle Auflistungen sind automatisch Referenztypen".

    Korrigiert mich bitte, falls ich da was falls sehe/in Erinnerung habe.

    Folgendes Beispiel:

    VB.NET-Quellcode

    1. Public Class foo
    2. Public Property Name As String
    3. Sub New()
    4. End Sub
    5. End Class


    Da hatte ich bisher gedacht, dass die Name-Property (wenn wir von dem Shadowing Fehler gerade absehen, da es ein Beispiel ist), automatisch den Wert String.Empty bekommt.
    Wie im obigen Beispiel funktioniert die Parameter-Geschichte nicht, weise ich aber explizit = String.Empty zu, dann geht es.
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Hallo Rootbob91

    Ja String ist ein Referenztyp, und neu Instantiierte Referenztypen haben als Default Wert "null" bzw "Nothing" Ich nehme an das es sich bei der Property genau so verhält bin aber auch gerade nicht ganz sicher :)

    Wie im obigen Beispiel funktioniert die Parameter-Geschichte nicht, weise ich aber explizit = String.Empty zu, dann geht es.


    Was würde dagegensprechen? Eigentlich währe es doch so am besten, da im Code der Wert für jeden klar ersichtlich ist. (Falls mehrere Leute daran entwickeln, ansonsten gibt es einem die Sicherheit das auch drinnen ist was man erwartet :D )

    Grüße
    MrNobody
    Referenztypen sind immer Nothing solange sie keinen Wert erhalten haben bzw. instanziert wurden. Das Ganze kannst du ganz einfach testen in dem du eine Stringvariable erstellst und dir diese im Debugger dann auswertest.
    Selbes auch bei

    VB.NET-Quellcode

    1. ​Dim c as DeineKlasse '-> Nothing
    2. c = new DeineKlasse '> Nicht mehr Nothing


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Bei String ist der = - Operator etwas eigentümlich.
    Bei normalen Referenztypen ist niemals eine Objektinstanz das gleiche wie Nothing. Anders bei String.
    Probiert mal dieses im Einzelschritt, und gugget b im Lokalfenster:

    VB.NET-Quellcode

    1. Dim b As Boolean
    2. b = "" Is String.Empty 'true
    3. b = "" = Nothing 'true
    4. b = "" Is Nothing 'false
    Also Nothing ist das gleiche wie String.Empty, ist aber nicht String.Empty.
    Hingegen "" ist String.Empty