数据库记录未更新

时间:2013-08-01 17:11:30

标签: vb.net visual-studio-2010 vb.net-2010

我希望有人能为我提供一些帮助吗?我花了最后4个小时试图解决这个问题,但没有到达任何地方。我实际上没有错误代码,这使得它变得更加困难,它只是没有做任何事情。

我要做的是读取Textbox2中的值,并从Table1中的GamesPlayed字段中减去它,其中JobID与TextBox1匹配。

我看不出我做错了什么?非常感谢。

 Dim conn As New OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0;Data Source=" & Application.StartupPath & "\Database1.mdb")
        Dim cmd As New OleDbCommand
        With cmd
            .CommandType = CommandType.Text
            .Connection = conn
            .CommandText = "UPDATE [Table1] SET GamesPlayed = GamesPlayed - " & Val(TextBox2.Text) & " WHERE JobID = TextBox1.text"
            .Parameters.Add("@p1", Me.ComboBox1.SelectedValue)
        End With
        conn.Open()
        cmd.ExecuteNonQuery()

3 个答案:

答案 0 :(得分:2)

你可以在一个好的开始,但你需要使用你添加的参数。

Dim conn As New OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0;Data Source=" & Application.StartupPath & "\Database1.mdb")
    Dim cmd As New OleDbCommand
    With cmd
        .CommandType = CommandType.Text
        .Connection = conn
        .CommandText = "UPDATE [Table1] SET GamesPlayed = @p1 WHERE JobID = @p2"
        .Parameters.Add("@p1", Me.ComboBox1.SelectedValue)
        .Parameters.Add("@p2", Me.Textbox1.Text)
    End With
    conn.Open()
    cmd.ExecuteNonQuery()

我还建议将控件命名为有用的东西,而不是默认的设计器名称。

答案 1 :(得分:0)

改变这个:

.CommandText = "UPDATE ...  JobID = TextBox1.text"

到那个:

.CommandText = "UPDATE ... JobID = " & TextBox1.text

答案 2 :(得分:0)

cmd.ExecuteNonQuery()不会直接返回值。如果您想获得值,请尝试cmd.ExecuteReader()。例如:

        Dim cmd As New OleDb ("UPDATE [Table1] SETCommandGamesPlayed = GamesPlayed - " & Val(TextBox2.Text) & " WHERE JobID = TextBox1.text")
        Dim yourvalvue As OleDbDataReader = cmd.ExecuteReader()

       Do While (yourvalue.read)
         'what you want to do
       Loop

This question是不同执行函数的一个很好的例子。