2016-03-18 15 views
0

Ich benutze Visual Basic und Zugriff.SQL Einfügen Syntaxfehler, wenn ich verketten mit "&"

Wenn ich versuche, mit "+" zu verketten, geben Sie den folgenden Fehler frei: Die Konvertierung von String "" zu "Double" ist ungültig.

Mein Code:

Protected Friend Sub insertarProducto(ByVal codigo As String, ByVal modelo As String, ByVal serial As String, ByVal pallet As String, ByVal precio As Double, ByVal cantidad As Integer, ByVal descripcion As String) 
    Try 
     con.Open() 
     adapter = New OleDbDataAdapter("Insert into Productos(Cod_Producto,Serial,Lote/pallet,Modelo,Descripcion,Precio,Cantidad)Values('" & codigo & "','" & serial & "','" & pallet & "','" & modelo & "','" & descripcion & "'," & precio & "," & cantidad & ")", con) 
     adapter.Fill(tabla) 
    Catch ex As Exception 
     MsgBox("Problemas en la consulta: " + ex.Message(), MsgBoxStyle.Critical) 
    End Try 
    con.Close() 
End Sub 

Die Reihenfolge meiner Spalten ist gut. Was ist hier los?

+1

Beenden Sie die Verkettung Ihrer SQL und verwenden Sie parametrisierte Anweisungen, und Sie haben diese Probleme nicht. (Ihr Problem besteht darin, dass Sie eine Zeichenfolge an eine Spalte übergeben, die als Fließkommaart definiert ist, oder versuchen, einen Gleitpunkt mit einer Zeichenkette zu verketten, und sie kann nicht konvertiert werden. Verwenden Sie Parameter, um genau zu wissen, welcher Wert zugewiesen wird zu welchem ​​param, und Sie können Fließkommawerte und Daten anstelle von was auch immer in einer Zeichenkette sein verwenden. Sie vermeiden auch Probleme mit SQL-Injektion.) Ihre Frage ist verwirrend, BTW - der Titel sagt * verketten mit & *, aber der Der erste Satz sagt * mit + *. –

+0

Da passiert etwas auf zwei Arten .... Verketten mit &: "SQL Insert Syntaxfehler." Verketten mit +:" Konvertierung von String "" auf "Double" ist nicht gültig. " – TwoDent

+0

Wie gesagt, verketten Sie nicht und Sie haben diese Probleme nicht. Das Problem ist, dass Sie alle zitieren Das Verknüpfen und Verwenden von Parametern würde es dem DB-Treiber ermöglichen, das Zitieren bei Bedarf und die korrekte Konvertierung anderer Werte wie Datumsangaben in das richtige Format zu handhaben, und Sie vermeiden dies all die albernen Umwandlungsfehler und das Zitieren von Fehlern –

Antwort

3

(besonders Ken) Ich habe deinen Rat befolgt. Endlich konnte ich erfolgreich Daten in meine Datenbank einfügen! Erste modifizierte ich den Namen einer Spalte (Lote/Palette) und schrieb diesen Code:

Protected Friend Sub insertarProducto(ByVal codigo As String, ByVal modelo As String, ByVal serial As String, ByVal pallet As String, ByVal precio As Double, ByVal cantidad As Integer, ByVal descripcion As String, ByVal imagen As String) 
    Dim cmd As String = "Insert into Productos(Cod_Producto,Serial,Lotpallet,Modelo,Descripcion,Precio,Cantidad,Imagen)Values(@Cod_Producto,@Serial,@Lotpallet,@Modelo,@Descripcion,@Precio,@Cantidad,@Imagen)" 
    Try 
     con.Open() 
     comando = New OleDbCommand(cmd, con) 
     comando.Parameters.AddWithValue("@Cod_Producto", codigo) 
     comando.Parameters.AddWithValue("@Serial", serial) 
     comando.Parameters.AddWithValue("@Lotpallet", pallet) 
     comando.Parameters.AddWithValue("@Modelo", modelo) 
     comando.Parameters.AddWithValue("@Descripcion", descripcion) 
     comando.Parameters.AddWithValue("@Precio", precio) 
     comando.Parameters.AddWithValue("@Cantidad", cantidad) 
     comando.Parameters.AddWithValue("@Imagen", imagen) 
     comando.ExecuteNonQuery() 
     comando.Dispose() 
    Catch ex As Exception 
     MsgBox("Problemas en la consulta: " + ex.Message(), MsgBoxStyle.Critical) 
    End Try 
    con.Close() 
End Sub 

Diese Website hilft mir eine Menge: http://www.codeguru.com/columns/vb/using-parameterized-queries-and-reports-in-vb.net-database-applications.htm

Ich weiß nicht, ob der beste Weg war, es zu tun ... Vielen Dank für Ihren Rat!

1

Verwendung parametrisierte Anweisungen

  _command = New SqlCommand 
      _command.Connection = connection 
      _command.CommandTimeout = 30 
      tabla = new dataset() 
      _sqlda = New SqlDataAdapter(_command) 

      _command.Parameters.AddWithValue("@Cod_Producto", codigo) 
      _command.Parameters("@Cod_Producto").Direction = ParameterDirection.Input 

      _command.Parameters.AddWithValue("@Serial", serial) 
      _command.Parameters("@Serial").Direction = ParameterDirection.Input 

     and so on.. 
      _sqlda.Fill(tabla) 

oder

 Public Function FillDataSet(query As String, ByVal ParamArray para() As Object) As DataSet 

      dim _transaction As SqlTransaction 
      Dim _command As SqlCommand 

      _command = New SqlCommand(query, yourConnection) 

      _ds = New DataSet 
      _sqlda = New SqlDataAdapter(_command) 
      _command.Transaction = _transaction 

      For i = 0 To para.Count - 1 
       _command.Parameters.AddWithValue("@" & i, para(i)) 
      Next 

      _sqlda.Fill(_ds) 

      return _ds 
-1

Ihr Code

OleDbDataAdapter ist ("Insert in Productos (Cod_Producto, Seriell, Lote/Palette, Modelo, Descripcion, Preis, Cantidad) Werte ('& codigo & "', '" & seriell & "', '" & Palette & " ''" & modelo & " ''" & descripcion & "‘," & precio &", "& cantidad & ")", con)

die letzten 2 Variablen Versuchen überprüft, es sehen Sie, dass yoy ein einzelnes und doppelte Anführungszeichen fehlen. Es sollte wie folgt aussehen:

OleDbDataAdapter ("Einfügen in Productos (Cod_Producto, Seriell, Lote/Palette, Modelo, Descripcion, Preis, Cantidad) VALUES ('" & codigo & " ''" & Serien & „‘ ' "& Paletten &"', ' "& modelo &"', ' "& descripcion &"', ' "& precio &"', ' "& cantidad &"' „), con)

+0

Formatieren Sie Ihren Code-Teil mit '{}'. – Raju