MySql Daten auslesen

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    MySql Daten auslesen

    Hallo an alle,

    ich beschäftige mich gerade mit dem Auslesen von Datumswerten aus einer MySql DB leider klappt das nicht so wie ich mir das vorstelle.

    txtheute wird mit dem aktuellen Datum "Date.Today" gefüllt und anhand dieser Daten soll er in der Tabelle suchen und mir in eine seprates Textfeld den Inhalt von "Body" bringen aber es passiert nicht würde mich über eure Unterstützung freuen.


    VB.NET-Quellcode

    1. Dim _conn As New MySql.Data.MySqlClient.MySqlConnection
    2. Dim cmd As New MySql.Data.MySqlClient.MySqlCommand
    3. Dim reader As MySql.Data.MySqlClient.MySqlDataReader
    4. Dim connectionString As String = "Server=****;User ID=****;Password=****;Database=****;"
    5. Private Sub lesenDatum()
    6. Dim csql As String = "SELECT * FROM bmi"
    7. csql &= " WHERE Datum = #" & txtheute.Text & "#"
    8. cmd.Connection = _conn
    9. '1. Datenbankverbindung herstellen.
    10. _conn.ConnectionString = connectionString
    11. '2. csql - Select anweisung ausführen.
    12. '3. Abfragen, ob die Rückgabe Werte enthält.
    13. cmd.CommandText = csql
    14. Try
    15. _conn.Open()
    16. reader = cmd.ExecuteReader()
    17. Do While reader.Read()
    18. TextBox3.Text = reader("Body")
    19. Loop
    20. reader.Close()
    21. _conn.Close()
    22. Catch ex As Exception
    23. MsgBox(ex.Message)
    24. End Try
    25. End Sub



    Danke

    Michael


    Edit by Dodo:
    -> VB-Tags eingefügt

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

    Also mal was zum Ablauf:

    1. Verbindung aufbauen
    2. Verbindung dem Command zuweisen
    3. SQL Query dem Command zuweisen
    4. Command ausführen


    du weißt den Command eine Verbindung zu die noch gar nicht geöffnet/hergestellt ist.

    mpeterjena schrieb:

    txtheute wird mit dem aktuellen Datum "Date.Today" gefüllt

    Und wenn jemand seine Datumsanzeige "anders" hat?

    VB.NET-Quellcode

    1. Debug.Print(Date.Today.ToString(Globalization.CultureInfo.CreateSpecificCulture("en-US"))) ' 5/10/2012 12:00:00 AM
    2. Debug.Print(Date.Today.ToString(Globalization.CultureInfo.CreateSpecificCulture("de-de"))) ' 10.05.2012 00:00:00


    cmd.commandtext = "SELECT * FROM foo WHERE Datum = @Datum"
    cmd.Parameters.AddWithValue("@Datum", Date.Today)

    btw:
    leider klappt das nicht so wie ich mir das vorstelle.

    Diese Fehlerbeschreibung hilft uns extrem weiter ... NOT
    @Dodo habe jetzt alles so umgeschrieben das erst die Verbindung geöffnet wird und dann der Command ausgeführt wird.


    VB.NET-Quellcode

    1. Private Sub lesenDatum()
    2. cmd.Connection = _conn
    3. _conn.ConnectionString = connectionString
    4. Dim csql As String = "SELECT * FROM bmi"
    5. csql &= " WHERE Datum = #" & txtheute.Text & "#"
    6. cmd.Connection = _conn
    7. '1. Datenbankverbindung herstellen.
    8. _conn.ConnectionString = connectionString
    9. '2. csql - Select anweisung ausführen.
    10. '3. Abfragen, ob die Rückgabe Werte enthält.
    11. cmd.CommandText = csql
    12. Try
    13. _conn.Open()
    14. reader = cmd.ExecuteReader()
    15. Do While reader.Read()
    16. TextBox3.Text = reader("Body")
    17. Loop
    18. reader.Close()
    19. _conn.Close()
    20. Catch ex As Exception
    21. MsgBox(ex.Message)
    22. End Try
    23. 'End If
    24. End Sub


    allerdings bringt er mir jetzt immer die Meldung "Index außerhalb des Array Bereiches"


    Edit by Dodo:
    Ich habe schon dein ersten Post bearbeitet, bitte mach es doch nächste Mal von dir aus, dass für VB Code auch die entsprechenden Tags hier benutzt, Danke!
    -> VB-Tag eingefügt

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

    mpeterjena schrieb:

    @Dodo habe jetzt alles so umgeschrieben das erst die Verbindung geöffnet wird und dann der Command ausgeführt wird.



    Nein, hast du nicht

    Zeile 6 weist du die Connection dem Command zu

    VB.NET-Quellcode

    1. cmd.Connection = _conn


    Zeile 14 wird die Verbindung allerdings erst geöffnet

    VB.NET-Quellcode

    1. _conn.Open()


    ich noch blutiger Anfänger

    Gerade da sollte man KEIN Try-Catch verwenden, wenn man nicht weiß wo der Fehler auftritt, ließ dir hierzu mla folgenden Thread druch [VB.NET] TryCatch ist ein heißes Eisen
    Das ist die genaue Fehlermeldung

    System.IndexOutOfRangeException wurde nicht behandelt.
    Message=Der Index war außerhalb des Arraybereichs.
    Source=MySql.Data
    StackTrace:
    bei MySql.Data.MySqlClient.MySqlTokenizer.ReadComment(Char c)
    bei MySql.Data.MySqlClient.MySqlTokenizer.FindToken()
    bei MySql.Data.MySqlClient.MySqlTokenizer.NextToken()
    bei MySql.Data.MySqlClient.Statement.InternalBindParameters(String sql, MySqlParameterCollection parameters, MySqlPacket packet)
    bei MySql.Data.MySqlClient.Statement.BindParameters()
    bei MySql.Data.MySqlClient.PreparableStatement.Execute()
    bei MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
    bei MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()
    bei fitnessapplikation.frmGewicht.lesenDatum() in C:\Dokumente und Einstellungen\mpeter\eigene dateien\visual studio 2010\Projects\fitnessapplikation\fitnessapplikation\frmGewicht.vb:Zeile 33.
    bei fitnessapplikation.frmGewicht.Button1_Click(Object sender, EventArgs e) in C:\Dokumente und Einstellungen\mpeter\eigene dateien\visual studio 2010\Projects\fitnessapplikation\fitnessapplikation\frmGewicht.vb:Zeile 7.
    bei System.Windows.Forms.Control.OnClick(EventArgs e)
    bei System.Windows.Forms.Button.OnClick(EventArgs e)
    bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    bei System.Windows.Forms.Control.WndProc(Message& m)
    bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
    bei System.Windows.Forms.Button.WndProc(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    bei System.Windows.Forms.Application.Run(ApplicationContext context)
    bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    bei fitnessapplikation.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
    bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
    bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    bei System.Threading.ThreadHelper.ThreadStart()
    InnerException:

    Ich setze mich auch schon dran an das umschreiben allerdings muss ich mir da noch einiges anlesen ist nicht ganz einfach für einen anfänger

    mpeterjena schrieb:

    System.IndexOutOfRangeException wurde nicht behandelt.
    Message=Der Index war außerhalb des Arraybereichs.
    Source=MySql.Data

    Also von MySQL. Ich sach, mach ma mit DBParameter ...

    BTW: Wie kommst du darauf, dass MySQL ein Datum ebenfalls in ## haben will?
    dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
    Da steht das Datum immer in ''. Tja, mit DBParameter passiert sowas nicht ... (sagte ich wohl schon?)

    siehe auch: dev.mysql.com/doc/refman/5.0/en/date-and-time-literals.html