SQL erkennt Variable als Spaltenname [Insert Into]

  • VB.NET

Es gibt 34 Antworten in diesem Thema. Der letzte Beitrag () ist von mmgg.

    Wo ihr grade dabei seid. Ich programier so PHP sachen und so ein bisschrn unf bisher hab ich immer in php einfach
    $com = "INSERT INTO `tabelle` (`spalte1`, `spalte2`) VALUES ('".$input1."', '".$input2."')";

    VB:
    String command = "INSERT INTO `tabelle` (`spalte1`, `spalte2`) VALUES ('"&textbox1.Text&"', '"&textbox2.Text&"')"

    Ist das so in der form nicht auch möglich in VB? Wenn nein Wieso?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcel1997“ ()

    In Vb.Net werden Strings nicht mit "+"zusammen gefügt, sondern mit einem "&"
    ansonsten würde dein Beispiel auch funktionieren :)
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Ich bekomme immernoch die Fehlermeldung

    Falsche Syntax in der Nähe von '?'.

    Hier nochmal der Code:

    VB.NET-Quellcode

    1. Imports System.Data.Sql
    2. Imports System.Data.SqlClient
    3. Public Module SqlCeExtensions
    4. ''' <summary> allgemeine Methode, aus einer SqlCeConnection, einem CommandText und optionalen Werten
    5. ''' ein parametrisiertes SqlCeCommand zu erstellen </summary>
    6. ''' <remarks>Vorrausgeetzt ist, dass die übergebenen values Datentypen haben, die zu den in der Datenbank
    7. ''' festgelegten Spalten passen. Eine Überprüfung findet nicht statt.</remarks>
    8. <Runtime.CompilerServices.Extension()> _
    9. Public Function CreateCommand(ByVal con As SqlConnection, ByVal commandText As String, ByVal ParamArray values As Object()) As SqlCommand
    10. Dim splits = commandText.Split("?"c) ' Parameter-Platzhalter '?' identifizieren
    11. If splits.Count <> values.Length + 1 Then Throw New ArgumentException( _
    12. "Anzahl der Argumente passt nicht zur Anzahl der Parameter-Platzhalter im CommandText")
    13. Dim cmd = New SqlCommand()
    14. ' für jeden Platzhalter einen DbParameter adden, und den Param-Namen an den Platzhalter schreiben
    15. For i = 0 To values.Length - 1
    16. Dim param = cmd.Parameters.AddWithValue("@a" & i, values(i))
    17. splits(i) = splits(i) & param.ParameterName
    18. Next
    19. cmd.CommandText = String.Concat(splits)
    20. cmd.Connection = con
    21. Return cmd
    22. End Function
    23. End Module
    24. Public Class Hauptfenster
    25. Private Sub bAnlegen_Click(sender As Object, e As EventArgs) Handles bAnlegen.Click
    26. Dim dbNachname As String = "Nachname"
    27. Dim dbVorname As String = "Vorname"
    28. Dim dbAnmeldedatum As String = "Anmeldedatum"
    29. Dim dbErinnerungsdatum As String = "Erinnerungsdatum"
    30. Dim sqlCon As New SqlConnection With {.ConnectionString = "Server=NICK-PC\SQLEXPRESS;Database=Fahrschüler;Trusted_Connection=Yes;"} ' Erwstelt Connectiostring für SQL Server
    31. Dim querryString As String = "INSERT INTO Fahrschüler (Nachname, Vorname, Anmeldedatum, Erinnerungsdatum) VALUES (?,?,?,?)"
    32. Dim command As SqlCommand = sqlCon.CreateCommand(querryString, dbNachname, dbVorname, dbAnmeldedatum, dbErinnerungsdatum)
    33. SQLCon.Open() ' Öffnet Connection zu SQL Server und der Datenbank
    34. Dim Ds As DataSet = New DataSet()
    35. Dim da As New SqlClient.SqlDataAdapter(querryString, SQLCon)
    36. da.Fill(Ds, "Fahrschüler")
    37. MessageBox.Show("Abgeschlossen")
    38. SQLCon.Close() ' Schließt die Verbindung
    39. End Sub
    40. End Class
    Scheib es mal so:

    VB.NET-Quellcode

    1. Dim command As SqlCommand = sqlCon.CreateCommand( "INSERT INTO Fahrschüler (Nachname, Vorname, Anmeldedatum, Erinnerungsdatum) VALUES (?,?,?,?)", dbNachname, dbVorname, dbAnmeldedatum, dbErinnerungsdatum)
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    das anners schreiben wird auch nix bringen - guck nochma genau: Du erstellst nu ein schönes Command mit meiner schönen Extension - benutzt das Command aber garnicht, sondern erzeugst den DataAdapter ganz anners.
    Sieh nochmal nach inne Doku, wie man einen DataAdapter mit einem Command erzeugt, statt mit einem String.

    Edit: Frag lieber nicht, sondern sieh selbst nach (oder frag, wie man sowas nachsieht).
    Es ist unabdingbar total wichtig, dass du die Programmierwerkzeuge, die dir zur Verfügung stehen, kennen- und nutzen lernst.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Was verstehst du unter Doku?

    Guck dir mal folgendes an: Visual-Studio richtig nutzen

    zb der ObjectBrowser hat eine ganz einfache Suche-Funktion, in der man einen Klassennamen eingibt, und bekommt die vollständige Doku all ihrer Member angezeigt - was ein Klassen-Member ist, weißt du?
    Das sind Methoden, Properties, Events oder Felder.
    Was ein Feld ist, weißt du?
    Was eine Methode ist, weißt du? das ist entweder eine Sub oder eine Function.
    Hi Leute,

    ich weiß, ich bin ein bischen spät, aber ich habe diese Problemstellung immer beinahe so gelöst, wie von WhitePage vorgeschlagen, allerdings mit den erforderlichen Hochkommata im String (die DateAndTimePicker wären dann ein weiterer Vorschlag):

    VB.NET-Quellcode

    1. Dim DBNachname As String = Me.tbNachname.Text
    2. Dim DBVorname As String = Me.tbVorname.Text
    3. Dim DBAnmeldedatum As Date = dtpAnmeldung.Value 'DateAndTimePicker
    4. Dim DBErinnerungsdatum As Date = dtpErinnerung.Value 'DateAndTimePicker
    5. ...
    6. Dim da As New SqlClient.SqlDataAdapter("INSERT INTO Fahrschüler (Nachname, Vorname, Anmeldedatum, Erinnerungsdatum)
    7. VALUES ('" & DBNachname & "','" & DBVorname & "','" & DBAnmeldedatum & "','" & DBErinnerungsdatum & "')", SQLCon)
    8. ...


    Das erscheint mir als die am wenigsten komplizierte Lösung. Und funktionieren tut sie auch noch ...

    HTH

    Ciao Arthur
    Yeah es hat geklappt

    Vielen Dank Arthur :) Dann hatte ich also nur eine falsche Syntax bei meinem 1. Verusch.

    Trotzdem Vielen Dank ErfinderDesRades für die Mühe. Ich bin mir sicher, dass deine Methode sicherer und störungsunanfälliger ist, jedoch bin ich noch nicht soweit um sie zu verstehen Ich glaube um so zu denken, dass ich dich verstehe brauche ich noch ein paar Jahre Programmererfahrung oder jemand, der sich neben mich setzt. Tausend Dank für deinen Versuch.

    An Alle die mir versucht haben zu Helfen: VIELEN,VIELEN DANK

    Gruß Schnickalodeon
    Gradezu Schade, dasses geklappt hat, weil nun wirst du dir vmtl. nicht mehr die Mühe machen, die in post#29 aufgeworfenen Fragen für dich zu bearbeiten.
    Mit dem Ergebnis, dass du hier nur 1% von dem gelernt hast, was du eiglich hättest lernen können (wenn überhaupt).
    Und natürlich wurstelst du weiter ohne DbParameter, also prinzipiell unverantwortlich unsicher.
    naja - das nächste Problem kommt bestimmt, weil das eiglich notwendige Progger-KnowHow haste hier ja nun verpasst.
    Hallo Arthur,
    wenn du es nicht gepostet hättest, hät ichs getan, man kann den glauben an die menschheit verlieren, wenn man auf diesen thread trifft.

    @erfinder,
    du wolltest nur helfen, nich wahr?
    JonDonym
    Eine Anonymisierung-Tool, das nicht nur deine IP verdeckt, sondern deine History, BrowserTyp, Windows-Version etc.
    Das Tool hat ca. 5 FreeKaskaden und ca. 10 Premium. Minimum 5 EUR für ein Volumen von 650MB.
    Die Lösung von @_Arthur_ ist gefährlich. Was passiert, wenn ich als Nachnamen ','','',''); DROP TABLE Fahrschüler; -- angebe? Richtig alle Daten sind gelöscht. Also bleibe bei PreparedStatements.
    Zeile 42 ist falsch. Anstatt ​querryString und SQLCon musst du dort deinen ​SqlCommand übergeben.
    Mit freundlichen Grüßen,
    Thunderbolt
    Themenforum ist keine Bildungseinrichtung, wo ich mich für einen Kurs einschreibe und der lehrer vorgibt was zu lernen ist.
    Wenn das hier so sein soll, - ob dann der User das vorher wissen solte/darf, damit er entscheiden kann, so wie er es tut wenn er einen kurs besucht?


    der TE will es so machen, macht es so in PHP, ihn nun wissen zu lassen wie es geht PLUS Zusatz wie es besser geht, - Das bringt keiner fertig von all den anderen Antwortgebern die sich hie rgemeldet haben???

    Und ich will gar nicht wissen warum, allein dass man diese Frage stellen kann, reicht
    JonDonym
    Eine Anonymisierung-Tool, das nicht nur deine IP verdeckt, sondern deine History, BrowserTyp, Windows-Version etc.
    Das Tool hat ca. 5 FreeKaskaden und ca. 10 Premium. Minimum 5 EUR für ein Volumen von 650MB.