1

我为实习项目创建了一个期刊计划,并且正在使用 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。

在此先感谢,理查德·保利切利

4

2 回答 2

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没有任何问题

于 2012-08-06T18:08:04.793 回答
3

UPDATE您的这部分陈述可能有问题:

"' WHERE JournalDate=" & DatePicked

如果日志字段JournalDate是日期/时间数据类型,则使用访问日期分隔符 ( #) 将日期字符串值括起来。

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

您还可以将日期字符串转换为 yyyy-mm-dd 格式,以避免误解基于本地的日期文字。

我同意为此使用参数查询的建议。我只是想帮助您了解为什么最初的尝试可能会失败。

于 2012-08-06T18:09:02.940 回答