我正在处理与.accdb文件接口的VB.Net应用程序,以创建和(最终)更新同一数据库中两个表上的记录。我能够向表中写入新信息没有任何问题,但它正在更新/更改/添加其他信息到我遇到问题的表中同一行。我写的更新到现有的行的代码是在我的文章的底部。VB.NET更新.accdb记录
我遇到的最大问题是,在执行此子程序后,它在objCmd.ExecuteNonQuery()
上失败,并显示错误消息IErrorInfo.GetDescription failed with E_FAIL(0x80004005)
。我已经在这里和谷歌梳理,尝试不同的方法和移动的东西,我无法弄清楚我错过了什么。据我所知,我没有在我的SQL查询中使用任何保留字。 Else
语句下的块可用于创建新行(我的程序的那一侧没有问题),也许语法与更新命令不同?任何帮助/见解非常感谢。
Private Sub WriteToDatabase()
strcs = txtSerialNumber.Text
strOrderType = orderType
strPoRMA = txtPoRMA.Text
strtech = cboTech.Text
strDate = calendarTest.SelectionStart
'Write to database if Production
If strOrderType = "PO" Then
'Check database for duplicate record
strSQL = "SELECT * FROM [New Camera Database] WHERE cameraSer=" & strcs
objCmd = New OleDbCommand(strSQL, dbconn)
dr = objCmd.ExecuteReader
dr.Read()
If dr("calCompleteDate").ToString <> "" Then
MsgBox("Camera S/N " & strcs & " completed " & dr("calCompleteDate") & ". Use Lookup to reprint Cert. of Compliance", vbOK + vbExclamation,
"Camera S/N " & strcs & " already completed")
exitFlag = True
Else
'Write to New Camera Database Table
strSQL = "UPDATE [New Camera Database] SET [email protected] , [email protected], [email protected] WHERE cameraSer=" & strcs
objCmd = New OleDbCommand(strSQL, dbconn)
objCmd.Parameters.AddWithValue("@poNum", strPoRMA)
objCmd.Parameters.AddWithValue("@calCompleteDate", strcs)
objCmd.Parameters.AddWithValue("@calCompleteTech", strtech)
objCmd.ExecuteNonQuery()
'Write to up2DateTravelers Table
strSQL = "UPDATE up2DateTravelers SET poRMANum = @poRMANum, calCompleteDate = @calCompleteDate, calCompleteTech = @calCompleteTech WHERE cameraSer=" & strcs
objCmd = New OleDbCommand(strSQL, dbconn)
objCmd.Parameters.AddWithValue("@poRMANum", strPoRMA)
objCmd.Parameters.AddWithValue("@calCompleteDate", strcs)
objCmd.Parameters.AddWithValue("@calCompleteTech", strtech)
objCmd.ExecuteNonQuery()
End If
ElseIf strOrderType = "RMA" Then
'Create new functions, userform, etc (TBD)
End If
btnClear.PerformClick()
End Sub
不知道为什么Else下面的代码块看起来像是被注释过(红色),因为它不在我的程序中。与外部相同End If和btnClear.PerformClick() – Alex
可能的SQL注入攻击:'cameraSer =“&strcs' –
看起来您正在使用'strcs',它是'txtSerialNumber.Text'的值并尝试使用它作为日期('calCompleteDate')在你的UPDATE语句中。另外,正如@JonathanAllen所说,你不应该使用*动态SQL *;你应该使用'... WHERE cameraSer = @ oneMoreParameter'。 –