Datenbank auslesen

  • VB.NET
  • .NET 3.5

SSL ist deaktiviert! Aktivieren Sie SSL für diese Sitzung, um eine sichere Verbindung herzustellen.

Es gibt 51 Antworten in diesem Thema. Der letzte Beitrag () ist von Facebamm.

    Datenbank auslesen

    Ich möchte derzeit eine Tabelle auslesen. Als Vorgabe gibt es eine TextBox. In dieser wird eine Zahl eingegeben. Nun soll geprüft werden ob diese Zahl in der Datenbank vorhanden ist. Allerdings weiß ich nicht wie es bei meinem Befehl aktuell möglich ist da ich mit SELECT * FROM TABELLENNAME ja erstmal die Tabelle Abfrage. Diese soll aber nicht Dynamisch sein sondern aus der TextBox ausgelesen werden. Wie ist dies am besten zu realisieren?



    VB.NET-Quellcode

    1. Dim SQLAbfrage As String = "SELECT * FROM linien WHERE linie='" + Replace(linien, " ", "")



    *Topic verschoben*

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

    Als erstes prüfe, ob du wirklich eine DB brauchst.
    Man kann nämlich viel einfacher auch komplexeste Daten in simple Dateien speichern.

    Datenbänkerei sollte man nämlich unbedingt **richtig** anfangen, und das Instrumentarium dazu ist entweder höchst umständlich oder erfordert ziemlich Einarbeitung, um es sich wieder einfach zu machen.
    Wenn man aber falsch anfängt (so wie hier: User-Eingaben in Sql-Statements einfrickeln) - wenn man so anfängt, programmiert man quasi sich selbst.
    Nämlich wenn du auf dem Weg voranschreitest, wirst du iwann mal eine Anwendung veröffentlichen, die dir (oder noch schlimmer: deinem Kunden) gehackt wird.

    Aber wie gesagt: Warum brauchst du überhaupt eine DB?
    Eine Anwendung, die mit DB-Technologie auf Problemchen losgeht, die dessen garnet bedürfen, ist prinzipiell schlecht gecodet, egal wie gekonnt die DB-Technologie eingesetzt wird.
    Einfach weil zigfach unnütz umständlich.
    Grundsätzlich stimme ich @ErfinderDesRades zu. Jedoch, irgendwann muss man ja mal mit ner kleinen DB-Anwendung anfangen um dies zu lernen. Mal von den Sicherheitsaspekten abgesehen:

    @Busfahring Wo genau kommst du nicht weiter. Wie man Daten aus einer DB abfrägt bekommst du hin? Das heißt du kannst mit einer simplen SELECT * FROM Abfrage bereits Daten abfragen und du brauchst lediglich Hilfe für das SQL-Statement?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:

    Jedoch, irgendwann muss man ja mal mit ner kleinen DB-Anwendung anfangen um dies zu lernen.
    Ja - es lernen wollen ist ein guter Grund.
    Aber bitte nicht, bevor man relationale Datenmodellierung und Databinding beherrscht.

    Beachte: Bevor! Macht man sich ohne diese Kenntnisse an Datenbänkerei, so verbaut man sich eiglich zwangsläufig die Databinding-Option, und heraus kommen ziemlich greuliche, untypisierte, ineffiziente, instabile Spagetti-Monster.
    Dann baue halt die Textbox in deine Abfrage ein:

    "SELECT * FROM '" & Textbox.Text &"'"

    P.S. Unsichere Variante!
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Busfahring schrieb:

    Eine Datenbank wird in jedenfall erforderlich.
    Vielleicht hast du recht.
    Aber tatsächlich solltest du darauf achten, dass du die DB nicht der Gefahr einer SQL-Injection unterwirfst.

    Ausserdem:
    Die Tatsache, dass Daten mal aus einer Tabelle kommen, mal aus einer anderen, kommt mir merkwürdig vor.
    Es mag solche Notwendigkeiten gelegentlich geben, aber häufiger sind das Fehler im Design.
    Möchtest du dein Datenmodell zur Analyse mal hier rein stellen?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo lieben dank für euren Rat.

    Wie schon gesagt ist eine Datenbank Verbindung notwendig da Daten von der Datenbank an bestimmte Nutzer übergeben werden sollen. Ich bin derzeit dabei ein Programm zu schreiben was für mehrere Nutzer bestimmt ist die am Ende immer auf die gleichen Daten zugreifen können sollten was natürlich erklärt warum ich alles über die Datenbank struktuieren möchte.

    Ich habe derzeit noch einen Fehler den ich irgendwie nicht behoben bekomme. Das auslesen der Datenbank kann nicht an den Server übergeben werden.

    Hier der Code

    VB.NET-Quellcode

    1. Dim SQLAbfrage As String = "SELECT * FROM '" & TextBox1.Text & "WHERE linie='" + Replace(linie, " ", "") & "'"

    Busfahring schrieb:

    Das auslesen der Datenbank kann nicht an den Server übergeben werden.
    Was genau bedeutet da?

    Du hast geschrieben, dass eine einfache Abfrage bereit klappt... Zeig mal deinen ganzen DB relevanten Code.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Setz doch mal n Haltepunkt nach der Stringgenerierung und lass Dir den Stringinhalt anzeigen. Auch wenn ich nix von SQL weiß, würd ich behaupten, dass zumindest vor dem "WHERE" ein Leerzeichen fehlt.
    • meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    • eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    • »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    • If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    Ich sende eben mal den kompletten Code rein damit Ihr euch ein besseres Bild von der Funktion aus machen könnt.

    VB.NET-Quellcode

    1. Dim conn As MySqlConnection
    2. conn = New MySqlConnection
    3. conn.ConnectionString =
    4. "Data Source=localhost;" +
    5. "Initial Catalog=ibis;" +
    6. "User id=root;" +
    7. "Password=;"
    8. Try
    9. conn.Open() ' Verbindung öffnen
    10. Catch myerror As MySqlException
    11. MsgBox("Keine Verbindung zur Datenbank : " & myerror.Message.ToString) ' Falls Fehler : Fehler anzeigen
    12. End Try
    13. Dim benutzer = TextBox1.Text
    14. Dim myAdapter As New MySqlDataAdapter
    15. Dim SQLAbfrage As String = "SELECT * FROM '" & TextBox1.Text & "' WHERE username='" + Replace(benutzer, " ", "") & "'"
    16. Dim myCommand As New MySqlCommand
    17. myCommand.Connection = conn
    18. myCommand.CommandText = SQLAbfrage
    19. myAdapter.SelectCommand = myCommand
    20. Dim myData As MySqlDataReader
    21. myData = myCommand.ExecuteReader() ' Hier startet man die SQL Abfrage
    22. If myData.HasRows Then ' Wenn die Abfrage Einträge enthält / also der Benutzer und das Passwort stimmen überein
    23. Main.Label1.Text = benutzer
    24. Me.Hide()
    25. Main.Show()
    26. conn.Close()
    27. conn.Open()
    28. Else 'Sonst wird angezeigt das die Daten falsch sind
    29. MsgBox("Gib eine Richtige Linie ein du Hurensohn")
    30. End If
    31. End Sub


    das where username ist in diesem fall nur als test mit eingebaut. Auch in der Struktur ist username definiert.



    An welcher Stelle knallt es und welche Fehlermeldung kommt? Mach mal das letzte conn.Open() weg, das ist quatsch.

    P.S. Was ist den das für eine seltsame Fehlermeldung am Ende ;-p
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Es knallt hier

    VB.NET-Quellcode

    1. myData = myCommand.ExecuteReader() ' Hier startet man die SQL Abfrage


    und kommt von

    VB.NET-Quellcode

    1. Dim SQLAbfrage As String = "SELECT * FROM '" & TextBox1.Text & "' WHERE username='" + Replace(benutzer, " ", "") & "'"


    Genauer Fehler

    VB.NET-Quellcode

    1. You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''1601' WHERE username='1601'' at line 1
    Versuch mal so:

    Dim SQLAbfrage As String = "SELECT * FROM " & TextBox1.Text & " WHERE username= '" & Replace(benutzer, " ", "") & "'"

    Welchen Datentyp hat die Spalte username?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Der gleiche Fehler bleibt weiterhin bestehen.

    Als Datentyp habe ich einen integer angegeben mit einer länge von 11

    You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1601 WHERE username= '1601'' at line 1

    //edit

    die username hat einen varchar von 11

    Bei where username hinter 1601 setzt er nen doppelten

    VB.NET-Quellcode

    1. '

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

    Welchen Inhalt hat die Variable SQLAbfrage wenn diese abgeschickt wird? Schau bitte beim debuggen nach und schreib hier den kompletten Inhalt des Strings, wie er dir angezeigt (nicht was du denkst was drin steht) wird.

    Wen die Spalte den Datentyp Integer hat, lass mal.die Hochkommas da weg.

    Dim SQLAbfrage As String = "SELECT * FROM " & TextBox1.Text & " WHERE username= "& Replace(benutzer, " ", "")
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Ich bin mir gerade nicht bewusst gewesen welchen Teil du meinst. Allerdings habe ich die details mal kopiert

    VB.NET-Quellcode

    1. MySql.Data.MySqlClient.MySqlException wurde nicht behandelt.
    2. ErrorCode=-2147467259
    3. HResult=-2147467259
    4. Message=You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1601 WHERE username= 1601' at line 1
    5. Number=1064
    6. Source=MySql.Data
    7. StackTrace:
    8. bei MySql.Data.MySqlClient.MySqlStream.ReadPacket()
    9. bei MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId)
    10. bei MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertedId)
    11. bei MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
    12. bei MySql.Data.MySqlClient.MySqlDataReader.NextResult()
    13. bei MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
    14. bei MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()
    15. bei Login.kurse.Button2_Click(Object sender, EventArgs e) in C:\Users\User\Desktop\Ibis\Ibis\Ibis\kurse.vb:Zeile 26.
    16. bei System.Windows.Forms.Control.OnClick(EventArgs e)
    17. bei System.Windows.Forms.Button.OnClick(EventArgs e)
    18. bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    19. bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    20. bei System.Windows.Forms.Control.WndProc(Message& m)
    21. bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
    22. bei System.Windows.Forms.Button.WndProc(Message& m)
    23. bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    24. bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    25. bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    26. bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    27. bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    28. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    29. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    30. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    31. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    32. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    33. bei Login.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
    34. bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    35. bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    36. bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    37. bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    38. bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    39. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    40. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    41. bei System.Threading.ThreadHelper.ThreadStart()
    42. InnerException:


    diese anführungszeichen stimmen scheinbar nicht bzw sehen mir komisch aus


    VB.NET-Quellcode

    1. use near '1601 WHERE username= 1601' at line 1
    Setze einen Haltepunkt bei

    Dim SQLAbfrage As String = bla bla bla

    Den Inhalt der Variablen bitte hier Posten.


    Steht in der Textbox die korrekte Tabelle?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:



    Steht in der Textbox die korrekte Tabelle?


    Jaaa

    Hab es nun wie folgt

    VB.NET-Quellcode

    1. Dim SQLAbfrage As String = "SELECT * FROM " & TextBox1.Text & "' WHERE username= '" & Replace(benutzer, " ", "")

    mit folgenden Fehler

    VB.NET-Quellcode

    1. {"You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1601' WHERE username= '1601' at line 1"}