数据类型不匹配,正确的查询和表

时间:2014-10-14 09:17:49

标签: vb.net ms-access sql-update

为你准备了一个新的,尝试了我能想到的一切,但没有成功。 我希望能够编辑一些文本框,然后更新它们在数据库中的记录。我使用这段代码:

 Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
    connection.Open()
         cmdupdate.CommandText = "UPDATE tbl_stal SET Locatie = '" & cbLocatienummer.Text & "', Coordinaten = '" & txtCoordinaten.Text & "' WHERE ID = '" & cbID.Text & "'"
    cmdupdate.CommandType = CommandType.Text
    cmdupdate.Connection = connection
    cmdupdate.ExecuteNonQuery()
    MsgBox("De gegevens zijn aangepast." & vbNewLine & "The data has been modified." & vbNewLine & "Die Daten sind angepasst.", MsgBoxStyle.OkOnly, "Voersoorten")
    connection.Close()
    cmdupdate.Dispose()

我确信数据库表的名称及其字段是正确的,尝试在表字段上使用数字和基于文本的设置(通常它们应该是数字,但它们也可能是文本。) 但是,当我将datagridvieuw中的一些数据加载到文本框中时,更改坐标(例如)并点击更新按钮,它将给出数据类型不匹配的错误。 除了上述之外,还有什么呢?

1 个答案:

答案 0 :(得分:1)

使用任何类型的sql文本将数据写入数据库表时,不应使用字符串连接来构建SQL。这是因为你可能在提供的字符串中遇到问题(如果这些字符串中的一个包含嵌入的单引号怎么办?)并且因为获取用户输入并将其附加到命令是一种非常危险的做法导致Sql Injection <登记/> (那么MS-Access不支持多个命令,所以你在这里更安全一点)

所以你应该用这种方式重写你的查询

Dim cmdText = "UPDATE tbl_stal SET Locatie = ?, Coordinaten = ? WHERE ID = ?"
Using connection = new OleDbConnection(.....)
Using cmdUpdate = new OleDbCommand(cmdText, connection)
    connection.Open()
    cmdUpdate.Parameters.AddWithValue("@p1", cbLocatienummer.Text)
    cmdUpdate.Parameters.AddWithValue("@p2", txtCoordinaten.Text)
    cmdUpdate.Parameters.AddWithValue("@p3", Convert.ToInt32(cbID.Text))
    cmdUpdate.ExecuteNonQuery()
End Using
End Using

请注意,您应该提供一个参数,其中包含与您的字段数据类型匹配的确切数据类型,文本字段的字符串,数字字段的数字。