答案 0 :(得分:2)
首先,我建议您认真考虑使用参数。如您所见,如果您使用参数,则不会出现语法错误。正如史蒂夫指出的那样,这也将消除像奥哈拉或奥凯利这样名字的问题。
其次它还可以保护您免受SQL注入攻击 - 请参阅Bobby Tables。
最后,在使用数据库连接时,实现一个使用块是很好的做法,以防忘记关闭连接,它将在使用块的末尾处理掉。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Using con As New OleDb.OleDbConnection
con.ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0;" & _
"Data Source = database path here"
con.Open()
Dim sql As String = "INSERT INTO Atletas (Nome, Contacto, Email, dataNascimento, Morada, idEscalao) VALUES (@nome, @contacto, @email, @datanascimento, @morada, @idescalao);"
Dim sql_insert As New OleDbCommand
With sql_insert
.Parameters.AddWithValue("@nome", Text_Nome.Text)
.Parameters.AddWithValue("@contacto", Text_Contacto.Text)
.Parameters.AddWithValue("@email", Text_Email.Text)
.Parameters.AddWithValue("@datanascimento", Data_Picker.Value.ToString("yyyy/MM/dd")) '''Assuming the value needed is a date only
.Parameters.AddWithValue("@morada", Text_Morada.Text)
.Parameters.AddWithValue("@idescalao", Cstr(Combo_Escalao.Tag))
.CommandText = sql
.Connection = con
.ExecuteNonQuery()
End With
con.close()
End Using
End Sub
答案 1 :(得分:1)
你缺少两个撇号,一个在开头,另一个在最后。用分号结束它也是一种很好的做法。试试这个:
sql = "INSERT INTO Atletas ( Nome, Contacto, Email, dataNascimento, Morada, idEscalao ) VALUES( '" & Text_Nome.Text & "','" & Text_Contacto.Text & "','" & Text_Email.Text & "','" & Data_Picker.Text & "','" & Text_Morada.Text & "','" & Combo_Escalao.Tag & "');"
然而,正如Plutonix在他的评论中所建议的那样:不要连接字符串来制作SQL。 Use SQL parameters 强>