尝试更新记录时收到错误

时间:2015-02-23 06:48:35

标签: sql vb.net ms-access sqlparameters sql-parametrized-query

在我的程序中,我有一个名为runSQL的函数,这里是:

Dim Connection As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=TrainingLog.accdb")
    Dim DT As New DataTable
    Dim DataAdapter As OleDb.OleDbDataAdapter

    Connection.Open()
    DataAdapter = New OleDb.OleDbDataAdapter(query, Connection)
    DT.Clear()
    DataAdapter.Fill(DT)
    Connection.Close()
    Return DT

我尝试使用来自此代码的更新字符串更新数据库中的记录:

    Dim sqlString As String

    sqlString = "UPDATE UserRecords set FirstName = '" & txtName.Text
    sqlString = sqlString & "', LastName = '" & txtSurname.Text

    If ChkSmoker.Checked = True Then
        sqlString = sqlString & "', Smoker = true"
    ElseIf ChkSmoker.Checked = False Then
        sqlString = sqlString & "', Smoker = false"
    End If

    sqlString = sqlString & ", Weight = " & txtWeight.Text

    If RdoMale.Checked = True Then
        sqlString = sqlString & ", Gender = 'm'"
    ElseIf RdoFemale.Checked = True Then
        sqlString = sqlString & ", Gender = 'f'"
    End If

    sqlString = sqlString & " WHERE UserName = '" & LstUsers.SelectedItem.ToString & "'"

    runSQL(sqlString)

但是,一旦我点击了保存按钮,我就会从runSQL函数的第7行得到一个错误(不包括空行,这就是DataAdapter.Fill(DT)行),它说“"否给出一个或多个必需参数的值。"

我想知道是否有人知道这是为什么或如何解决它。

我想到的一件事是,在更新的表中,除了我的UPDATE语句中提到的字段之外还有其他字段。例如,有一个名为" TeamMember"的是/否字段,我在更新声明中没有提及。 使用更新功能时,是否必须为每个字段赋予值,即使那些字段没有被更改?

感谢阅读,希望能帮到你!

1 个答案:

答案 0 :(得分:0)

你不应该自己编写SQL查询。为了创建参数化查询或使用存储过程,它更容易和更安全(用于注入SQL注入)。然后通过设置查询或存储过程名称和参数值来执行它。

此外,通过这种方式,您无需为特定值处理正确的格式。例如,如何格式化日期?而且,如何格式化布尔值?您查询的问题很可能是您尝试为false列设置的trueSmoker值,因为在TSQL中这是一个有点值,并且只能是{ {1}}或0

选中此项以查看使用参数的示例:ADO.NET Code Examples(单击VB选项卡以在VB中查看)。您将看到在查询中定义了一个指定带有1前缀的名称的参数,然后您只需为查询中的每个参数传递一个值,它将以正确的格式传递给服务器没有你照顾它。

取自其中一个样本:

@

请注意,您可以通过不同方式执行命令,具体取决于您只需执行命令或获取标量值或完整数据集。