sql abfrage

  • VB.NET

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von Svenson.

    sql abfrage

    Hallo an alle,

    ich habe folgendes Problem:

    ich frage eine Datenbank ab mit

    VB.NET-Quellcode

    1. Dim editdate As Date
    2. editdate = DateTimePicker1.Value
    3. cmd.Connection = Con
    4. cmd.CommandText = "Select sum(test1) as summe from test WHERE datumvon like %" & editdate & "%"


    ohne die Datumsabfrage funktioniert das auch wie es soll nur mit der Datumsabfrage bekomme ich immer die Fehlermeldung:

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

    ich habe den Datetimepicker überprüft der steht im Format auf short bringt mir auch wenn ich ihn in einer Textbox ausgeben lasse das richtige Datum
    nur hier in der Abfrage generiert er diesen Syntax Fehler.

    Wo mache ich den Fehler
    Hallo mpj,

    Deine LIKE geht beim Datum nicht. Du müsstest = nehmen.

    So etwa

    VB.NET-Quellcode

    1. ​ cmd.CommandText = "SELECT SUM(test1) AS summe FROM test WHERE datumvon= @par"
    2. cmd.Parameters.Clear()
    3. cmd.Parameters.Add("@par", SqlDbType.Date).Value = CDate(editdate)
    Hallo Svenson,

    das bringt mich auch eine Fehlermeldung das die Funktion veraltet ist.

    Wenn ich die die Datum angaben direkt abfrage

    VB.NET-Quellcode

    1. ​cmd.CommandText = "Select sum(test1) as summe from test WHERE datumvon between '01.07.2014' AND '31.07.2014'"


    geht es einwandfrei
    Morgen,

    Die @par ist im SQL-String mit drinne und wird vorher schon deklariert.

    VB.NET-Quellcode

    1. ​ cmd.CommandText = "UPDATE Maschinendaten SET Ar_Plz= @par1 WHERE Standort= @par"
    2. With cmd
    3. .Parameters.Clear()
    4. .Parameters.Add("@par", SqlDbType.NVarChar).Value = "Transport"
    5. .Parameters.Add("@par1", SqlDbType.Bit).Value = True
    6. End With


    mal als Beispiel :)
    Morgen,

    ich habe jetzt alles so gemacht wie du es mir vorgeschlagen hast hier mein geänderter Code:

    VB.NET-Quellcode

    1. Dim cmd As New OleDbCommand
    2. Dim reader As OleDbDataReader
    3. Dim ConStr As String = "Provider=SQLNCLI10;Server=BIE\SQLEXPRESS;Database=Fitness;Uid=mpeter;Pwd=mp971150; Integrated Security=SSPI;"
    4. Dim Con As New OleDbConnection(ConStr)
    5. Dim editdate As Date
    6. Dim editdate2 As Date
    7. editdate = DateTimePicker1.Value
    8. editdate2 = DateTimePicker2.Value
    9. cmd.Connection = Con
    10. cmd.CommandText = "SELECT SUM(test1) AS summe FROM test WHERE datumvon= @par and datumbis = @par2"
    11. With cmd
    12. .Parameters.Clear()
    13. .Parameters.AddWithValue("@par", SqlDbType.Date).Value = CDate(editdate)
    14. .Parameters.AddWithValue("@par2", SqlDbType.Date).Value = CDate(editdate2)
    15. End With
    16. Con.Open()
    17. reader = cmd.ExecuteReader()
    18. reader.Read()



    trotzdem sagt er mir: Die '@par'-Skalarvariable muss deklariert werden.

    nehme ich nur den Parameters.Add dann bekomme ich folgende Fehlermeldung:

    Warnung 1 "Public Function Add(parameterName As String, value As Object) As System.Data.OleDb.OleDbParameter" ist veraltet: "Add(String parameterName, Object value) has been deprecated. Use AddWithValue(String parameterName, Object value). go.microsoft.com/fwlink/?linkid=14202". C:\Dokumente und Einstellungen\mpeter\eigene dateien\visual studio 2010\Projects\datenbank\datenbank\versuche.vb 60 13 datenbank
    Versuchs mal so.

    VB.NET-Quellcode

    1. Public con As New SqlClient.SqlConnection
    2. Public cmd As New SqlClient.SqlCommand
    3. Public reader As SqlClient.SqlDataReader


    hab ich vergessen

    VB.NET-Quellcode

    1. ​Imports System.Data.SqlClient
    @Svenson

    meine verbindungsdaten sind:

    VB.NET-Quellcode

    1. ​Dim cmd As New OleDbCommand
    2. Dim reader As OleDbDataReader
    3. Dim ConStr As String = "Provider=SQLNCLI10;Server=BIE\SQLEXPRESS;Database=Fitness;Uid=mpeter;Pwd=mp971150; Integrated Security=SSPI;"
    4. Dim Con As New OleDbConnection(ConStr)


    auch

    VB.NET-Quellcode

    1. ​Imports System.Data.SqlClient


    habe ich im System
    "@ErfinderDesRades

    ja das habe ich wenn ich mit paramters.Add arbeite dann bekomme ich die Meldung ist veraltet wenn ich mit Parameters.AddWithValue arbeite bekomme ich den Fehler "Die '@par'-Skalarvariable muss deklariert werden" ich habe schon die ganze Nacht hin und her probiert setze ich die Datumsabfrage im klartext in den cmd text läuft er anstandslos durch.
    @ErfinderDesRades

    so habe bzw. hatte ich den umgesetzt, er bringt ja auch nur noch den Fehler das die "Die '@par'-Skalarvariable" nicht deklariert ist.

    VB.NET-Quellcode

    1. ​Dim cmd As New OleDbCommand
    2. Dim reader As OleDbDataReader
    3. Dim ConStr As String = "Provider=SQLNCLI10;Server=BIE\SQLEXPRESS;Database=Fitness;Uid=mpeter;Pwd=mp971150; Integrated Security=SSPI;"
    4. Dim Con As New OleDbConnection(ConStr)
    5. Dim editdate As Date
    6. Dim editdate2 As Date
    7. editdate = DateTimePicker1.Value
    8. editdate2 = DateTimePicker2.Value
    9. cmd.Connection = Con
    10. cmd.CommandText = "SELECT SUM(test1) AS summe FROM test WHERE datumvon= @par and datumbis = @par2"
    11. With cmd
    12. .Parameters.Clear()
    13. .Parameters.AddWithValue("@par", SqlDbType.Date).Value = CDate(editdate)
    14. .Parameters.AddWithValue("@par2", SqlDbType.Date).Value = CDate(editdate2)
    15. End With
    16. Con.Open()
    17. reader = cmd.ExecuteReader()
    18. reader.Read()
    cool!
    Svenson macht dir einen Vorschlag, und du setzt ihn nicht um, und jammerst, das der Fehler weiterbesteht.

    Und ich frag nach dem Code, mit dem du den Vorschlag umsetzt, und du zeigst mir den Code, mit dem du den Vorschlag nicht umsetzst.

    Mit solch Kommunikation kommt man natürlich nur sehr sehr langsam voran.

    Zeig doch mal den Code, wenn du den Vorschlag umsetzst - zur erinnerung: Der Vorschlag steht in Post#8
    habe ich gemacht da ich mit virtualbox arbeite mache ich immer vor den großen Umbauten einen kompletten Klone vom bestehenden Projekt darum dauert er auch teilweise bis ich eine Antwort schreibe.

    so sieht jetzt meine Umsetzung aus

    VB.NET-Quellcode

    1. ​Imports System.Data.SqlClient


    VB.NET-Quellcode

    1. ​Public con As New SqlClient.SqlConnection
    2. Public cmd As New SqlClient.SqlCommand
    3. Public reader As SqlClient.SqlDataReader




    VB.NET-Quellcode

    1. Dim ConStr As String = "Server=.\SQLExpress;AttachDbFilename=|DataDirectory|Fitness.mdf; Database=dbname;Trusted_Connection=Yes;"
    2. Dim Con As New SqlConnection(ConStr)
    3. Dim editdate As Date
    4. Dim editdate2 As Date
    5. editdate = DateTimePicker1.Value
    6. editdate2 = DateTimePicker2.Value
    7. cmd.Connection = Con
    8. cmd.CommandText = "SELECT SUM(test1) AS summe FROM test WHERE datumvon= @par and datumbis = @par2"
    9. With cmd
    10. .Parameters.Clear()
    11. .Parameters.AddWithValue("@par", SqlDbType.Date).Value = CDate(editdate)
    12. .Parameters.AddWithValue("@par2", SqlDbType.Date).Value = CDate(editdate2)
    13. End With
    14. Con.Open()
    15. reader = cmd.ExecuteReader()
    16. reader.Read()
    17. Dim summe As Object = reader("summe")
    18. TextBox4.Text = summe
    19. Label1.Text = "Für heute ist schon ein Datensatz in der Datenbank"


    jetzt läuft er soweit auch durch nur bekomme ich bei:

    VB.NET-Quellcode

    1. TextBox4.Text = summe
    2. Label1.Text = "Für heute ist schon ein Datensatz in der Datenbank"


    die Fehlermeldung "Ungültige Konvertierung von Typ DBNull in Typ String."

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

    Hallo Svenson,

    ich habe das so eingefügt, er springt immer bei Plan = 0 raus läuft aber sauber durch es scheint als wenn er keine Daten bekommt oder sehe ich das Falsch??

    um zu sehen ob die Daten für die Abfrage auch gesetzt werden habe ich deinen Prüfabschnitt erweitert

    VB.NET-Quellcode

    1. ​If IsDBNull(reader("summe")) Then
    2. Plan = 0
    3. TextBox1.Text = editdate
    4. TextBox2.Text = editdate2
    5. Else
    6. Plan = CInt(reader("summe"))
    7. End If


    In den Textboxen steht exakt das Datum was ich auch auswähle.

    Leider kann ich nicht arbeiten :/

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