Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 将文件添加到Access数据库中的附件列_Vb.net_Ms Access - Fatal编程技术网

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”,例如。我需要做些什么改变才能解决这个问题呢?谢谢,我用了你的第一个选择,效果不错。谢谢,我用了你的第一个选择,效果不错