Vb.net 将文件添加到Access数据库中的附件列
我正在使用以下代码:Vb.net 将文件添加到Access数据库中的附件列,vb.net,ms-access,Vb.net,Ms Access,我正在使用以下代码: Public Sub Add_File(Update_Table As Integer) Dim Fpath = My.Settings.Database_Connection_String Dim fd As OpenFileDialog = New OpenFileDialog() Dim strFileName As String fd.Title = "Open File Dialog" fd.InitialDire
Public Sub Add_File(Update_Table As Integer)
Dim Fpath = My.Settings.Database_Connection_String
Dim fd As OpenFileDialog = New OpenFileDialog()
Dim strFileName As String
fd.Title = "Open File Dialog"
fd.InitialDirectory = "C:\"
fd.Filter = "All files (*.*)|*.*|All files (*.*)|*.*"
fd.FilterIndex = 2
fd.RestoreDirectory = True
fd.Multiselect = True
If fd.ShowDialog() = DialogResult.OK Then
Dim FileRow
Try
FileRow = Form1.Projects_DGV.SelectedCells.Item(0).RowIndex
Catch ex As Exception
FileRow = 0
End Try
Dim FileX = Form1.Projects_DGV.Item(0, FileRow).Value
For Each file As String In fd.FileNames
strFileName = file
' this code requires that your project have the following COM Reference:
' Microsoft Office 14.0 Access Database Engine Object Library
Dim dbe As New Microsoft.Office.Interop.Access.Dao.DBEngine
Dim db As Microsoft.Office.Interop.Access.Dao.Database = dbe.OpenDatabase(My.Settings.Database_Location)
Dim rstRecord As Microsoft.Office.Interop.Access.Dao.Recordset = db.OpenRecordset( _
"SELECT * FROM [Projects] WHERE [Project ID]=" & FileX, _
Microsoft.Office.Interop.Access.Dao.RecordsetTypeEnum.dbOpenDynaset)
rstRecord.Edit()
Dim rstAttachments As Microsoft.Office.Interop.Access.Dao.Recordset2
If Update_Table = 1 Then
rstAttachments = rstRecord.Fields("Invoice").Value
ElseIf Update_Table = 2 Then
rstAttachments = rstRecord.Fields("Software Handover").Value
ElseIf Update_Table = 3 Then
rstAttachments = rstRecord.Fields("Other Documents").Value
ElseIf Update_Table = 4 Then
rstAttachments = rstRecord.Fields("Project Documents").Value
End If
rstAttachments.AddNew()
Dim AttachmentData As Microsoft.Office.Interop.Access.Dao.Field2 = rstAttachments.Fields("FileData")
AttachmentData.LoadFromFile(strFileName)
rstAttachments.Update()
rstAttachments.Close()
rstRecord.Update()
rstRecord.Close()
db.Close()
Next
setupdatagrids()
End If
End Sub
这段代码应该允许我将一个文件作为附件添加到数据库中,它在另外两个项目中运行良好,但由于某些原因,它现在不起作用。代码在此行失败:
Dim rstRecord As Microsoft.Office.Interop.Access.Dao.Recordset = db.OpenRecordset( _
"SELECT * FROM [Projects] WHERE [Project ID]=" & FileX, _
Microsoft.Office.Interop.Access.Dao.RecordsetTypeEnum.dbOpenDynaset)
错误如下:
类型的未处理异常
Alveare中出现“System.Runtime.InteropServices.COMException”-
完整管理工具.exe
其他信息:参数太少。预期1
当我传递一个参数时,有人知道为什么会这样吗
谢谢由于
项目ID
列包含文本而不是数字,请更改此项:
"SELECT * FROM [Projects] WHERE [Project ID]=" & FileX
为此:
"SELECT * FROM [Projects] WHERE [Project ID]='" & FileX & "'"
或者这个:
String.Format("SELECT * FROM [Projects] WHERE [Project ID]='{0}'", FileX)
我的首选是第二个选项。由于
项目ID
列包含文本而不是数字,请更改此选项:
"SELECT * FROM [Projects] WHERE [Project ID]=" & FileX
为此:
"SELECT * FROM [Projects] WHERE [Project ID]='" & FileX & "'"
或者这个:
String.Format("SELECT * FROM [Projects] WHERE [Project ID]='{0}'", FileX)
我的首选是第二个选项。是否有可能
FileX
的值包含空格,这会影响SQL的执行?是否应该在SQL中引用FileX
的值?除非它是整数,否则它应该是。我还注意到,您必须使用选项严格关闭
,这永远都不好。在所有其他项目中,数据库的主键始终是一个ID整数,但是在这个数据库中,它是一个字符串“F002-X”,例如。我需要做哪些更改才能解决这个问题?是否有可能FileX
的值包含空格,这会影响SQL的执行?是否应该在SQL中引用FileX
的值?除非它是整数,否则它应该是。我还注意到,您必须使用选项严格关闭
,这永远都不好。在所有其他项目中,数据库的主键始终是一个ID整数,但是在这个数据库中,它是一个字符串“F002-X”,例如。我需要做些什么改变才能解决这个问题呢?谢谢,我用了你的第一个选择,效果不错。谢谢,我用了你的第一个选择,效果不错