2016-06-12 5 views
2

コード:データベースにアイテムを挿入しようとすると、 '、'近くの誤った構文が表示されます。

型 'System.Data.SqlClient.SqlException' の未処理の例外がのSystem.Data.dll

で発生しました追加情報:

Private m_cn As New SqlConnection 
Private m_DA As SqlDataAdapter 
Private m_CB As SqlCommandBuilder 
Private m_DataTable As New DataTable 
Private m_intRowPosition As Integer = 0 

Private Sub InsertDatabaseItem_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    m_cn.ConnectionString = "Data Source=My-PC\SQLSERVEREXPRESS;Initial Catalog=ConvienienceProducts;Integrated Security=True" 

    m_cn.Open() 
    m_DA = New SqlDataAdapter("Select * From ProductIndex", m_cn) 
    m_CB = New SqlCommandBuilder(m_DA) 
End Sub 

Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click 
    Dim cmd As New SqlCommand(("INSERT INTO ProductIndex VALUES(" & 
           txtID.Text & "," & 
           txtName.Text & "," & 
           txtPrice.Text & "," & 
           txtDesc.Text & ")"), m_cn) 

    cmd.ExecuteNonQuery() 

    MsgBox("Success....", MsgBoxStyle.Information, "SUCCESS") 

    Me.Hide() 

    txtID.Clear() 
    txtName.Clear() 
    txtPrice.Clear() 
    txtDesc.Clear() 

    m_cn.Close() 
    m_cn.Dispose() 
End Sub 

Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click 
    Me.Hide() 
End Sub 

これはエラーメッセージです: '、'の近くの構文が正しくありません。

+1

[SQLインジェクションアラート](http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - SQLステートメントを連結しない** - SQLインジェクションを避けるために、**パラメータ化されたクエリ**を使用する –

答えて

6

を使用する必要があります。タイプは(特にPrice、おそらくID)は、おそらく間違っている、しかし、あなたは彼らが何であるかを知っている、と私はないそうであるように、あなたは簡単にそれらを修正することができ

Dim cmd As New SqlCommand(("INSERT INTO ProductIndex VALUES(" & 
          "@ID," & 
          "@Name," & 
          "@Price," & 
          "@Desc)"), m_cn) 

cmd.Parameters.Add("@ID", SqlDbType.Char) 
cmd.Parameters("@ID").Value = txtID.Text 
cmd.Parameters.Add("@Name", SqlDbType.Char) 
cmd.Parameters("@Name").Value = txtName.Text 
cmd.Parameters.Add("@Price", SqlDbType.Char) 
cmd.Parameters("@Price").Value = txtPrice.Text 
cmd.Parameters.Add("@Desc", SqlDbType.Char) 
cmd.Parameters("@Desc").Value = txtDesc.Text 

:これを試してみてください。

1

あなたは見えにくい単一引用符であなたの文字列の値をラップする

Dim cmd As New SqlCommand(("INSERT INTO ProductIndex VALUES('" & txtID.Text & "', 

を必要とするが、ちょうどあなたの変数を囲む二重引用符の前と後の単一引用符があります。

私はあなたの特定の質問に答えましたが、あなたはあなたのコードがparametersを使用しなければならないパラメータ

関連する問題