我为实习项目创建了一个期刊程序,我正在使用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
答案 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格式,以避免根据本地错误解释日期字面值。
我同意为此使用参数查询的建议。我只是想帮助你理解原来的尝试可能失败的原因。