使用vb.net更新数据库中的行

时间:2017-01-21 17:55:01

标签: vb.net

我正在尝试更新并保存一行数据库表。我已经使用了这个代码的一个版本来填充GridView并且它可以工作,所以我假设它与我的SQL语句有关;我没有得到错误,表只是没有更新。在页面加载事件中,我有文本框由行的信息填充,我有一个名为' temp'的全局变量,它将保存行的标题,以便我可以在按钮的点击事件。我得到的错误表明我没有给出我所需参数之一的值。调试器上的My Locals选项卡显示每个变量都有一个值,尽管我尝试更新的变量不是新数据,但仍然是旧数据。 我看了几个例子,但我找不到问题。感谢您的帮助。

Protected Sub btnSave_Click(sender As Object, e As EventArgs)

    Dim strTitle As String = txtTitle.Text
    Dim strConsole As String = txtConsole.Text
    Dim strYear As String= txtYear.Text
    Dim strPurchase As String = calDate.SelectedDate.ToString

    Using con As OleDbConnection = New OleDbConnection("PROVIDER=Microsoft.ACE.OLEDB.12.0;" + "DATA SOURCE=" + Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "App_Data", "db1.accdb"))
        Dim cmd As OleDbCommand = New OleDbCommand()

        cmd.CommandText = Convert.ToString("UPDATE Video_Games SET Title = @title, Console = @Console, Year_Released = @Year_Released, Purchase = @Purchase WHERE Title=" & temp)
        cmd.Connection = con

        cmd.Parameters.AddWithValue("@Title", strTitle)
        cmd.Parameters.AddWithValue("@Console", strConsole)
        cmd.Parameters.AddWithValue("@Year_Released", strYear)
        cmd.Parameters.AddWithValue("@Purchase", strPurchase)

        con.Open()

        cmd.ExecuteNonQuery()
        con.Close()
    End Using

    Server.Transfer("Form.aspx", True)
End Sub

我也尝试过将my where语句作为:WHERE Title='" & temp & "'")虽然这也不起作用。

This is the details of the Error message

3 个答案:

答案 0 :(得分:0)

我改变了你的commandText,如下所示,并创建了一个空白数据库,其中的表格与你的一样,并且更新有效

cmd.CommandText = "UPDATE Video_Games SET Title = @title, Console = @Console, Year_Released = @Year_Released, Purchase = @Purchase WHERE Title='" & temp & "'"

我为Title = Super Mario Bros设置变量,然后将temp变量设置为Wario World。我在我的数据库中创建了一个名为Wario World的记录,并且运行更新后将标题更改为Super Mario Bros。

检查你的临时变量是否与你的@title变量不同。还要检查表中是否包含临时变量标题

的记录

答案 1 :(得分:0)

谢谢大家的帮助,这是一个非常棒的社区。

我发现这个问题甚至与按钮的点击事件无关,它与页面加载事件有关。自页面加载以来,行的信息被加载并填充到文本框中,当单击按钮更新字段时,页面加载事件再次触发并将旧信息重新加载到字段中,基本上保存旧信息而不是新的。我的修复是创建一个If Not IsPostBack Then语句,封装我的页面加载代码。因此,按下按钮时不会保存代码。另一个,我不需要使用WHERE Title='" + strTitle + "'"工作的临时变量。希望这有助于其他人坚持类似的问题!

答案 2 :(得分:-2)

在where子句中使用日期始终是ify,因为它们是浮点数并且可能不相等。在比较之前,我会尝试围绕它们或将它们转换为字符串,例如这些方面的东西:

UPDATE Video_Games SET Title = @title, Console = @Console, Year_Released = @Year_Released, Format(Purchase, ""m/d/yyyy"") = Format(@Purchase, ""m/d/yyyy"") WHERE Title = @Title