我正在處理與.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'。 –