我正在尝试更新并保存一行数据库表。我已经使用了这个代码的一个版本来填充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 & "'")
虽然这也不起作用。
答案 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