Announcement

Collapse
No announcement yet.

SqlException: Incorrect syntax near '('.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SqlException: Incorrect syntax near '('.

    Hallo zusammen,

    ich habe meinen ersten Versuch mit SqlParametern gestartet und bin gleich mal auf einen Fehler gestossen, für den ich keine Lösung finde.

    Code:
    Imports System.IO
    Imports System.Text
    Imports System.Data.SqlClient
    Imports System.Configuration
    
    Public Class Form1
        Const DATEINAME As String = "C:\Users\UserID\Desktop\BESTELLUNGEN.csv"
        Const ANZAHLSPALTEN As Integer = 33 'Testen mit +-1 Spaltenanzahl
        Const TRENNZEICHEN As Char = ";"
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            Dim Felder() As String
            Dim Zeile As String
    
            Dim dt = New DataTable()
            Dim sr = My.Computer.FileSystem.OpenTextFileReader(DATEINAME, Encoding.UTF8)
    
            For I As Integer = 1 To ANZAHLSPALTEN
                dt.Columns.Add("Spalte " & I)       ' Spaltenüberrschriften erzeugen
            Next
    
            Do While (sr.Peek > -1)                 ' Dateiende abfragen
                Zeile = sr.ReadLine                 ' Eine Datenzeile lesen
                Felder = Zeile.Split(TRENNZEICHEN)  ' Splitten in Felder
                Dim dr As DataRow = dt.NewRow       ' Leere Datenzeile erstellen
                dr.ItemArray = Felder               ' In DataRow speichern
                dt.Rows.Add(dr)                     ' Felder zur Datatable hinzufügen
            Loop
    
            DataGridView1.DataSource = dt           ' DataTable in DataGridView zeigen
    
            For L As Integer = 3 To dt.Rows.Count - 3 ' Auswerten aller eingelesener Zeilen Abzüglich der 3 ersten Zeilen
    
                'MsgBox("Lieferant: " & dt.Rows(L)(0) & " Materialnummer: " & dt.Rows(L)(8) & " Materialkurztext: " & dt.Rows(L)(9) & " Lagerort: " & dt.Rows(L)(15))
    
               'Dim SQL_String As String = "UPDATE Bestelldaten([Lieferant], [Lieferdatum], [Bestellnummer], [Materialnummer], [Materialkurztext], [Menge], [Lagerort]) VALUES (@Lieferant, @Lieferdatum, @Bestellnummer, @Materialnummer, @Materialkurztext, @Menge, @Lagerort)"
                Dim SQL_String As String = "UPDATE Bestelldaten(Lieferant) VALUES(@Lieferant)"
    
                Dim param(7) As SqlParameter
    
                param(0) = New SqlParameter("@Lieferant", SqlDbType.NVarChar)
                param(0).Value = dt.Rows(L)(0)
    
                param(1) = New SqlParameter("@Lieferdatum", SqlDbType.DateTime)
                param(1).Value = "05.02.2012"
    
                param(2) = New SqlParameter("@Bestellnummer", SqlDbType.Int)
                param(2).Value = dt.Rows(L)(1)
    
                param(3) = New SqlParameter("@Materialnummer", SqlDbType.NVarChar)
                param(3).Value = dt.Rows(L)(8)
    
                param(4) = New SqlParameter("@Materialkurztext", SqlDbType.NVarChar)
                param(4).Value = dt.Rows(L)(9)
    
                param(5) = New SqlParameter("@Menge", SqlDbType.Int)
                param(5).Value = dt.Rows(L)(16)
    
                param(6) = New SqlParameter("@Lagerort", SqlDbType.Int)
                param(6).Value = dt.Rows(L)(15)
    
                Dim Conn_String As New SqlClient.SqlConnection(My.Settings.ConnectionString)
    
                Dim SQL_Command As SqlCommand = Conn_String.CreateCommand()
                SQL_Command.CommandText = SQL_String
    
                Conn_String.Open()
    
                SQL_Command.Parameters.Add(param(0))
                SQL_Command.Parameters.Add(param(1))
                SQL_Command.Parameters.Add(param(2))
                SQL_Command.Parameters.Add(param(3))
                SQL_Command.Parameters.Add(param(4))
                SQL_Command.Parameters.Add(param(5))
                SQL_Command.Parameters.Add(param(6))
    
                SQL_Command.ExecuteNonQuery()
    
                Conn_String.Close()
                SQL_Command.Dispose()
    
            Next
    
        End Sub
    
    End Class
    Als Fehler bekomme ich: Incorrect syntax near '('. Leider ist es mir bisher nicht gelungen die Stelle zu lokalisieren an der der Fehler ist.

    Ist warscheinlich wieder was ganz einfaches und ich bin nur zu blind es zu sehen.

  • #2
    Es sieht doch so aus, dass der erstellte SQL falsch ist. Schau dir diesen an oder poste den hier
    Christian

    Comment


    • #3
      Ich habe es mit den beiden folgenden SQL-Strings versucht:

      Dim SQL_String As String = "UPDATE Bestelldaten([Lieferant], [Lieferdatum], [Bestellnummer], [Materialnummer], [Materialkurztext], [Menge], [Lagerort]) VALUES (@Lieferant, @Lieferdatum, @Bestellnummer, @Materialnummer, @Materialkurztext, @Menge, @Lagerort)"


      Dim SQL_String As String = "UPDATE Bestelldaten(Lieferant) VALUES(@Lieferant)"

      Comment


      • #4
        Das ist nicht das SQL-Statement, sondern der Programmcode. Schau dir das erzeugte Statement an. -> Eigenschaft CommandText der Klasse
        Zuletzt editiert von Christian Marquardt; 24.07.2012, 12:43.
        Christian

        Comment


        • #5
          Wie wär's mit einem '..Set ..' im update statement?
          Was sollen alle die Parameter, wenn nur ein Feld im Update gesetzt wird?
          Schon mal ein Blick in die CSV Datenquelle bzw. die entnommenen Feldinhalte geworfen? Vielleicht enthalten die befüllten Parameter ja noch ein Separator Zeichen oder was auch immer für einen Schrott.
          Gruß, defo

          Comment


          • #6
            Man sollte nicht die Syntax von INSERT und UPDATE Statement verwechseln...

            Statt
            UPDATE Bestelldaten(Lieferant) VALUES(@Lieferant)
            [HIGHLIGHT="SQL"]INSERT Bestelldaten(Lieferant) VALUES(@Lieferant)[/HIGHLIGHT]
            oder [HIGHLIGHT="SQL"]UPDATE Bestelldaten SET Lieferant = @Lieferant WHERE ... [/HIGHLIGHT]
            (Beim Updaste ist eine Where-Klausel hilfreich...

            Comment

            Working...
            X