如何更新MS Access数据库(vb.net)

时间:2012-08-06 17:59:53

标签: database vb.net ms-access

我为实习项目创建了一个期刊程序,我正在使用MS-Access数据库。我在 VB.net 编程。现在,我正试图让它们“更新”他们的期刊,这意味着他们点击他们的日历日期,如果他们有一个日期,它会把它们带到该期刊。如果他们在该日期有一个,那么它会显示该日期的标题和日记文本条目。我想这样做,以便当他们点击更新按钮时,他们对日志所做的任何更改(编辑文本框字段)也会在数据库中更改。这是我到目前为止所拥有的

    Private Sub COE_JournalBtn_Click(sender As System.Object, e As System.EventArgs) Handles COE_JournalBtn.Click

    If DateTimePicker1.Value <> Nothing Then

        If TitleTxt.Text <> "" Then

            If JournalTextRtxt.Text <> "" Then

                myConnection.Open()

                Dim DatePicked As String = DateTimePicker1.Value
                Dim cmd As OleDbCommand
                Dim str As String

                Try

                    MyJournalTitle = TitleTxt.Text
                    MyJournalText = JournalTextRtxt.Text

                    str = "UPDATE Journals SET JournalTitle='" & MyJournalTitle & "', JournalText='" & MyJournalText & "' WHERE JournalDate=" & DatePicked

                    cmd = New OleDbCommand(str, myConnection)

                    cmd.ExecuteNonQuery()

                    myConnection.Close()

                Catch ex As Exception

                    MessageBox.Show("There was an error processing your request. Please try again." & vbCrLf & vbCrLf & _
                                    "Original Error:" & vbCrLf & vbCrLf & ex.ToString, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

                    myConnection.Close()

                End Try

                myConnection.Close()

            End If

        End If

    End If

End Sub

现在我的更新字符串本身是

"UPDATE Journals SET JournalTitle='" & MyJournalTitle & "', JournalText='" & MyJournalText & "' WHERE JournalDate=" & DatePicked

现在,发生了什么,绝对没有。没有错误框出现。没有消息框出现。该计划不会冻结。数据库保持不变。我究竟做错了什么?我的代码中是否有错误或缺少某些内容?请帮助我,因为我真的想弄清楚这一点,我一直在寻找VB.net的解决方案,找不到一个适用于我,因为我正在使用MS-Access而不是SQL。

提前致谢, Richard Paulicelli

2 个答案:

答案 0 :(得分:4)

使用参数化查询来避免Sql注入攻击和引用问题

str = "Journals SET JournalTitle=?, JournalText=? WHERE JournalDate=?"
cmd = New OleDbCommand(str, myConnection) 
cmd.Parameters.AddWithValue("@jounalTitle", MyJournalTitle )
cmd.Parameters.AddWithValue("@journalText", MyJournalText)
cmd.Parameters.AddWithValue("@journalDate", DatePicked)
cmd.ExecuteNonQuery() 

使用参数将释放代码,从而继续引用代码,使代码很有可能输入错误。你对Sql Injection

没有任何问题

答案 1 :(得分:3)

您的UPDATE声明的这一部分可能有问题:

"' WHERE JournalDate=" & DatePicked

如果日记帐字段JournalDate是日期/时间数据类型,请使用访问日期分隔符(#)包围日期字符串值。

"' WHERE JournalDate=#" & DatePicked & "#"

您还可以将日期字符串转换为yyyy-mm-dd格式,以避免根据本地错误解释日期字面值。

我同意为此使用参数查询的建议。我只是想帮助你理解原来的尝试可能失败的原因。