2016-03-18 17 views
0

私は視覚的な基本とアクセスを使用しています。SQL "&"と連結すると構文エラーが発生します

私は「+」で連結しようとすると、次のエラーを解放:「ダブル」を入力する文字列からの変換は「」有効ではありません。

マイコード:

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 

私の列の順序が良いです。 ここでは何が起こっていますか?

+1

SQLの連結を停止し、パラメータ化された文を使用すると、これらの問題は発生しません。 (あなたの問題は、浮動小数点型として定義された列に文字列を渡しているか、または浮動小数点をastringと連結して変換できないことです。パラメータを使用すると、割り当てられている値が正確にわかりますあなたは文字列内に何が起こっても浮動小数点値と日付を使うことができます。また、SQLインジェクションの問題を避けることもできます。)あなたの質問は混乱します、BTW - タイトルは*と&*を連結しますが、最初の文は*と+をつけています。 –

+0

何かが2つの方法で発生するため.... &: "SQL Insert Syntax error。" +:"文字列 "から" Double "を入力すると無効になります。" – TwoDent

+0

私が言ったように、連結しないでください。パラメータを連結したり使用したりしないと、DBドライバは必要な場所で引用符を処理し、日付のような他の値を適切な形式に変換することができなくなります。すべての愚かな変換の間違いと引用エラー。 –

答えて

3

(特にケン)私はあなたのアドバイスに従いました。 最後に、データベースにデータを正常に挿入できました。まず私は、カラム(LOTE /パレット)の名前を変更し、このコードを書いた:

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 

このウェブサイトはたくさん私を助ける:それを行うための最善の方法だった場合 http://www.codeguru.com/columns/vb/using-parameterized-queries-and-reports-in-vb.net-database-applications.htm

私はいけないが、知っています...あなたのアドバイスをいただきありがとうございます!

1

使用パラメータ化された文

  _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) 

または

 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

あなたのコードは

OleDbDataAdapterおよ(「PRODUCTOS(Cod_Producto、シリアル、LOTE /パレット、モデロ、Descripcion、PRECIOに挿入され、 Cantidad)値( ' "& codigo &"'、 ' "&シリアル&"'、 '」&パレット& " ''" &モデロ& " ''" & descripcion & "」、" & PRECIO & "、" & cantidad & ")"、CON)

最後の2つの変数をチェックしてみ、それyoyは一重引用符と二重引用符がないことを確認してください。

OleDbDataAdapterおよ( 'codigo & &を "(PRODUCTOS(Cod_Producto、シリアル、LOTE /パレット、モデロ、Descripcion、PRECIO、Cantidad)値に挿入" " ''" &シリアル&「」:それは次のようになります。 、 ' "&パレット&"'、 ' "&モデロ&"'、 ' "& descripcion &"'、 ' "& PRECIO &"'、 ' "& cantidad &"'「)、CON)

+0

'{}'ボタンでコード部分を整形します。 – Raju

関連する問題