将多个图像保存为 buffers/memory 同时流到相同的 table

Saving multiple images as buffers/memory streams to the same table at the same time

我对编码比较陌生,完全是自学的,所以请耐心等待。
我一直在网上搜索这个问题的答案,但我发现的所有内容要么 waaaaaaayyy 太技术化,看起来像古希腊语,要么根本不适合我的情况。

我正在为我的经理开发一个工作应用程序来记录员工信息。我目前正在处理的页面是关于受伤的,但是如果我能弄清楚的话,这将适用于多个页面。我知道我可能把某些事情复杂化了,这将是一个愚蠢的答案,但我已经尝试了到目前为止我能想到的一切。

我想做的是将手写笔记捕捉为图像,然后将它们保存到数据库中,供办公室的我们在需要时输入和翻译。 (我的很多经理都不打字)但这也适用于收集多个签名,即在写 ups 时。

我已经保存了图片,但是当需要将它们写入数据库时​​,第一张图片会写得很好,但是第二张图片我开始收到“条件表达式中的数据类型不匹配”错误。

我试过将第二张和第三张图片分开看是否是语法问题,但我仍然遇到错误。我重建了数据库 table 以确保目标字段是一个 OLE 对象,同样的错误。我已经搜索了几天的答案,但没有找到,所以如果有人可以提供帮助。

我知道这会很愚蠢,比如没有在正确的地方处理某些东西,但这超出了我目前的知识范围。预先感谢您的帮助。

`Private Sub AddState(pathD As String, PathC As String, PathS As String)   
 'Determination
    ' EXIT IF IMAGE NOT SELECTED
    If String.IsNullOrEmpty(pathD) Then Exit Sub

    'GET IMAGE DATA VIA MEMORY STREAM
    Dim imgD As Image = Image.FromFile(pathD)
    Dim msD As New MemoryStream()
    imgD.Save(msD, imgD.RawFormat)
    Dim bufferD As Byte() = msD.GetBuffer

    'Comments 
    ' EXIT IF IMAGE NOT SELECTED
    If String.IsNullOrEmpty(PathC) Then Exit Sub

    'GET IMAGE DATA VIA MEMORY STREAM
    Dim imgC As Image = Image.FromFile(PathC)
    Dim msC As New MemoryStream()
    imgC.Save(msC, imgC.RawFormat)
    Dim bufferC As Byte() = msC.GetBuffer

    'Supervisor Signature
    ' EXIT IF IMAGE NOT SELECTED
    If String.IsNullOrEmpty(PathS) Then Exit Sub

    'GET IMAGE DATA VIA MEMORY STREAM
    Dim imgS As Image = Image.FromFile(PathS)
    Dim msS As New MemoryStream()
    imgS.Save(msS, imgS.RawFormat)
    Dim bufferS As Byte() = msS.GetBuffer

    access.AddParam("@AccID", lblAccID.Text)
    access.AddParam("@EmpName", lblEmpName.Text)
    access.AddParam("@DOA", lblInjDate.Text)
    access.AddParam("@DOR", Today)
    access.AddParam("@Boss", cbxSupName.Text)
    access.AddParam("@Phone", txtPhone.Text)
    access.AddParam("@RepDate", dpRepDate.Value.Date)
    access.AddParam("@RepTime", txtRepTime.Text & " " & Time)
    access.AddParam("@DrUs", DrUs)
    access.AddParam("@DrThem", DrThem)
    access.AddParam("@Facility", cbxFacility.SelectedItem)
    access.AddParam("@Missed", Missed)
    access.AddParam("@DetType", txtDetermine.Text)
    access.AddParam("@DetFile", lblDetFileLoc.Text)
    access.AddParam("@CommentType", txtComments.Text)
    access.AddParam("@CommFile", lblComFileLoc.Text)
    access.AddParam("@SigFile", lblSigFileLoc.Text)
    access.AddParam("@DetWrite", bufferD)
    access.AddParam("@CommentWrite", bufferC)
    access.AddParam("@SupSig", bufferS)


    access.ExecQuery("INSERT INTO AccSup(AccID, InjEmp, InjDate, RepDate, Supervisor, SupPhone, DateReported, " &
                     "TimeReported, DrUs, DrThem, Facility, MissedWork, SupDetermination, DetFileLoc, " &
                     "SupComments,CommFileLoc, SigFileLoc, Determination, Comment, Sig)" &
                     "VALUES (@AccID, @EmpName, @DOA, @DOR, @Boss, @Phone, @RepDate, " &
                     "@RepTime, @DrUs, @DrThem, @Facility, @Missed, @DetType, @DetFile, " &
                     "@CommentType, @CommFile, @SigFile, @DetWrite, @CommentWrite, @SupSig) ")

    ' REPORT ERRORS
    If Not String.IsNullOrEmpty(access.exception) Then MsgBox(access.exception)

    MsgBox("Report Added")
End Sub

Private Sub cmdSubmit_Click(sender As Object, e As EventArgs) Handles cmdSubmit.Click
    AddState(lblDetFileLoc.Text, lblComFileLoc.Text, lblSigFileLoc.Text)
End Sub`

数据库控制

Public Class dbControlBU
    'CREATE YOUR DB CONNECTION
    Private DBCon As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" &
                                         "Data Source=C:\Users\Public\Documents\Open Enrollment\OpenEnrollment.accdb;Persist Security Info=True;Jet OLEDB:Database Password=****")

    ' PREPARE DB COMMAND
    Private DBCmd As OleDbCommand

    'DB DATA
    Public DBDA As OleDbDataAdapter
    Public DBDT As DataTable

    ' QUERY PARAMETERS
    Public Params As New List(Of OleDbParameter)

    ' QUERY STATISTICS
    Public RecordCount As Integer
    Public exception As String

    Public Sub ExecQuery(Query As String)
        ' RESET QUERY STATS
        RecordCount = 0
        exception = ""

        Try
            ' OPEN A CONNECTION
            DBCon.Open()

            ' CREATE DB COMMAND
            DBCmd = New OleDbCommand(Query, DBCon)

            ' LOAD PARAMS INTO DB COMMAND
            Params.ForEach(Sub(p) DBCmd.Parameters.Add(p))

            ' CLEAR PARAMS LIST
            Params.Clear()

            ' EXECUTE COMMAND AND FILL DATATABLE
            DBDT = New DataTable
            DBDA = New OleDbDataAdapter(DBCmd)
            RecordCount = DBDA.Fill(DBDT)

        Catch ex As Exception
            exception = ex.Message
        End Try

        'CLOSE YOUR CONNECTION
        If DBCon.State = ConnectionState.Open Then DBCon.Close()
    End Sub

    'INCLUDE QUERY & COMMAND PARAMETERS
    Public Sub AddParam(Name As String, Value As Object)
        Dim NewParam As New OleDbParameter(Name, Value)
        Params.Add(NewParam)
    End Sub

    'Schema Restrictions
    ' https://msdn.microsoft.com/en-us/library/cc716722%28v=vs.100%29.aspx

    Public Function GetTables() As List(Of String)
        Dim lstTables As New List(Of String)
        Dim restrictions As String() = New String() {Nothing, Nothing, Nothing, "TABLE"}

        Try
            DBCon.Open()
            DBDT = DBCon.GetSchema("Tables", restrictions)

            For Each r As DataRow In DBDT.Rows
                lstTables.Add(r("TABLE_NAME"))
            Next
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            If DBCon.State = ConnectionState.Open Then DBCon.Close()
        End Try

        Return lstTables
    End Function

    Public Function GetColumnsByTable(TableName As String) As List(Of String)
        Dim lstColumns As New List(Of String)
        Dim restrictions As String() = New String() {Nothing, Nothing, TableName, Nothing}

        Try
            DBCon.Open()
            DBDT = DBCon.GetSchema("Columns", restrictions)

            For Each r As DataRow In DBDT.Rows
                lstColumns.Add(r("COLUMN_NAME"))
            Next
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            If DBCon.State = ConnectionState.Open Then DBCon.Close()
        End Try

        Return lstColumns
    End Function

我得到的错误是

它发生在我通过我的应用程序和他的“提交”并将插入语句运行到 Access 数据库之后。 我已经重建了 Access 中的列以确保它们是正确的数据类型并且我没有不小心更改了某处的内容。那没有帮助。 第一张图片将保存,但第二张和第三张图片出现此错误。我试过不包括第一张图片。从 Insert into 语句中完全删除它,我想如果我这样做,那么图像 2 会保存,但不会保存 3。 不——他们俩还是没救。得到了同样的错误。 我尝试删除图像 1 和 2 以查看是否只有图像 2 有问题。同样的错误。那时电脑几乎没电了 window.

这是删除 Catch 语句后出现的错误。

System.Data.OleDb.OleDbException HResult=0x80040E07 Message=Data type mismatch in criteria expression. Source=System.Data
StackTrace: at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) at EmployeeManager_New.dbControl.ExecQuery(String Query) in C:\Users\CatWisian\Lone Star Calf Ranch\Lone Star Calf Ranch Site - Documents (1)\General\Cat Apps\Employee Manager-New\EmployeeManager_New\dbControl.vb:line 42 at EmployeeManager_New.SupStat.AddState(String pathD, String PathC, String PathS) in C:\Users\CatWisian\Lone Star Calf Ranch\Lone Star Calf Ranch Site - Documents (1)\General\Cat Apps\Employee Manager-New\EmployeeManager_New\English\Injury\SupStat.vb:line 639
at EmployeeManager_New.SupStat.cmdSubmit_Click(Object sender, EventArgs e) in C:\Users\CatWisian\Lone Star Calf Ranch\Lone Star Calf Ranch Site - Documents (1)\General\Cat Apps\Employee Manager-New\EmployeeManager_New\English\Injury\SupStat.vb:line 653
at System.Windows.Forms.Control.OnClick(EventArgs e) at System.Windows.Forms.Button.OnClick(EventArgs e) at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ButtonBase.WndProc(Message& m) at System.Windows.Forms.Button.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun() at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel() at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine) at EmployeeManager_New.My.MyApplication.Main(String[] Args) in :line 83

This exception was originally thrown at this call stack: [External Code] EmployeeManager_New.dbControl.ExecQuery(String) in dbControl.vb EmployeeManager_New.SupStat.AddState(String, String, String) in SupStat.vb EmployeeManager_New.SupStat.cmdSubmit_Click(Object, System.EventArgs) in SupStat.vb [External Code]

最新的错误代码

  at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
   at EmployeeManager_New.dbControl.ExecQuery(String Query) in C:\Users\CatWisian\Lone Star Calf Ranch\Lone Star Calf Ranch Site - Documents (1)\General\Cat Apps\Employee Manager-New\EmployeeManager_New\dbControl.vb:line 40
   at EmployeeManager_New.SupStat.AddState(String pathD, String PathC, String PathS) in C:\Users\CatWisian\Lone Star Calf Ranch\Lone Star Calf Ranch Site - Documents (1)\General\Cat Apps\Employee Manager-New\EmployeeManager_New\English\Injury\SupStat.vb:line 631
   at EmployeeManager_New.SupStat.cmdSubmit_Click(Object sender, EventArgs e) in C:\Users\CatWisian\Lone Star Calf Ranch\Lone Star Calf Ranch Site - Documents (1)\General\Cat Apps\Employee Manager-New\EmployeeManager_New\English\Injury\SupStat.vb:line 648
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
   at EmployeeManager_New.My.MyApplication.Main(String[] Args) in :line 83

并且仍然遇到相同的“数据标准不匹配”错误。我要开始用头敲桌子了。

  at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
   at EmployeeManager_New.dbControl.ExecQuery(String Query) in C:\Users\CatWisian\Lone Star Calf Ranch\Lone Star Calf Ranch Site - Documents (1)\General\Cat Apps\Employee Manager-New\EmployeeManager_New\dbControl.vb:line 40
   at EmployeeManager_New.SupStat.AddState(String pathD, String PathC, String PathS) in C:\Users\CatWisian\Lone Star Calf Ranch\Lone Star Calf Ranch Site - Documents (1)\General\Cat Apps\Employee Manager-New\EmployeeManager_New\English\Injury\SupStat.vb:line 631
   at EmployeeManager_New.SupStat.cmdSubmit_Click(Object sender, EventArgs e) in C:\Users\CatWisian\Lone Star Calf Ranch\Lone Star Calf Ranch Site - Documents (1)\General\Cat Apps\Employee Manager-New\EmployeeManager_New\English\Injury\SupStat.vb:line 648
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
   at EmployeeManager_New.My.MyApplication.Main(String[] Args) in :line 83

这是我在 Access 中的内容。也许有人可以查看问题是否存在。我认为不应该。我已经重建了这个 table 以确保它具有我想要的数据类型,以防万一我手指粗了。

我确实在开始使用图像之前测试了整个东西,因为我知道我正在和它们一起冒险进入新的领域,当时一切正常,所以我可以肯定地说是图像导致了问题。
这可能是一个访问的事情。我倾向于对这些事情抱有远大的梦想,然后当我发现 Access 不能做我想做的事情时,我不得不回到现实。 Sql 在这种情况下不是一个选择,因为这些家伙在谷仓里,互联网连接不稳定,所以我必须尽可能保持本地化。

一些实体使用“非托管资源”,需要通过调用 Dispose() on them. There is a way to have that happen automatically for you: the Using 语句明确处理。

碰巧,数据库连接(例如 OleDbConnection)和图像类型都是这样的实体。

这是一个如何修改代码的示例:

Private Sub AddState(pathD As String, PathC As String, PathS As String)
    ' EXIT EARLY IF IMAGE NOT SELECTED
    If String.IsNullOrEmpty(pathD) OrElse
       String.IsNullOrEmpty(PathC) OrElse
       String.IsNullOrEmpty(PathS) Then

        Exit Sub

    End If

    Dim bufferD As Byte()
    Dim bufferC As Byte()
    Dim bufferS As Byte()

    'GET IMAGE DATA VIA MEMORY STREAM
    Using imgD As Image = Image.FromFile(pathD),
          imgC As Image = Image.FromFile(PathC),
          imgS As Image = Image.FromFile(PathS)

        'Determination
        Dim msD As New MemoryStream()
        imgD.Save(msD, imgD.RawFormat)
        bufferD = msD.GetBuffer()

        'Comments 
        Dim msC As New MemoryStream()
        imgC.Save(msC, imgC.RawFormat)
        bufferC = msC.GetBuffer()

        'Supervisor Signature
        Dim msS As New MemoryStream()
        imgS.Save(msS, imgS.RawFormat)
        bufferS = msS.GetBuffer()

    End Using

    Dim access As New DbControlBu()

    'TODO: Fill in the OleDbType for every parameter
    access.AddParam("@AccID", OleDbType.VarChar, lblAccID.Text)
    access.AddParam("@EmpName", OleDbType.VarChar, lblEmpName.Text)
    access.AddParam("@DOA", lblInjDate.Text)
    access.AddParam("@DOR", OleDbType.Date, Today)
    access.AddParam("@Boss", cbxSupName.Text)
    access.AddParam("@Phone", txtPhone.Text)
    access.AddParam("@RepDate", dpRepDate.Value.Date)
    access.AddParam("@RepTime", txtRepTime.Text & " " & Time)
    access.AddParam("@DrUs", DrUs)
    access.AddParam("@DrThem", DrThem)
    access.AddParam("@Facility", cbxFacility.SelectedItem)
    access.AddParam("@Missed", Missed)
    access.AddParam("@DetType", txtDetermine.Text)
    access.AddParam("@DetFile", lblDetFileLoc.Text)
    access.AddParam("@CommentType", txtComments.Text)
    access.AddParam("@CommFile", lblComFileLoc.Text)
    access.AddParam("@SigFile", lblSigFileLoc.Text)
    access.AddParam("@DetWrite", OleDbType.LongVarBinary, bufferD)
    access.AddParam("@CommentWrite", OleDbType.LongVarBinary, bufferC)
    access.AddParam("@SupSig", OleDbType.LongVarBinary, bufferS)


    access.ExecQuery("INSERT INTO AccSup(AccID, InjEmp, InjDate, RepDate, Supervisor, SupPhone, DateReported, " &
                 "TimeReported, DrUs, DrThem, Facility, MissedWork, SupDetermination, DetFileLoc, " &
                 "SupComments,CommFileLoc, SigFileLoc, Determination, Comment, Sig)" &
                 "VALUES (@AccID, @EmpName, @DOA, @DOR, @Boss, @Phone, @RepDate, " &
                 "@RepTime, @DrUs, @DrThem, @Facility, @Missed, @DetType, @DetFile, " &
                 "@CommentType, @CommFile, @SigFile, @DetWrite, @CommentWrite, @SupSig) ")

    ' REPORT STATUS
    If String.IsNullOrEmpty(access.exception) Then
        MsgBox("Report Added")
    Else
        MsgBox(access.exception)
    End If

End Sub

数据库控制

Imports System.Data.OleDb

Public Class DbControlBu
    ' DB CONNECTION STRING
    Private Const connStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""C:\Users\Public\Documents\Open Enrollment\OpenEnrollment.accdb"";Persist Security Info=True;Jet OLEDB:Database Password=****"

    'DB DATA
    Public DBDA As OleDbDataAdapter
    Public DBDT As DataTable

    ' QUERY PARAMETERS
    Public Params As New List(Of OleDbParameter)

    ' QUERY STATISTICS
    Public recordCount As Integer
    Public exception As String

    Public Sub ExecQuery(query As String)
        ' RESET QUERY STATS
        recordCount = 0
        exception = ""

        Try
            Using conn As New OleDbConnection(connStr),
                   cmd As New OleDbCommand(query, conn)
                ' OPEN A CONNECTION
                conn.Open()

                ' LOAD PARAMS INTO DB COMMAND
                Params.ForEach(Sub(p) cmd.Parameters.Add(p))

                ' CLEAR PARAMS LIST
                Params.Clear()

                ' EXECUTE COMMAND AND FILL DATATABLE
                DBDT = New DataTable()
                DBDA = New OleDbDataAdapter(cmd)
                recordCount = DBDA.Fill(DBDT)

            End Using

        Catch ex As Exception
            exception = ex.Message
        End Try

    End Sub

    'INCLUDE QUERY & COMMAND PARAMETERS
    Public Sub AddParam(name As String, dbType As OleDbType, value As Object)
        Dim newParam As New OleDbParameter() With {.ParameterName = name, .OleDbType = dbType, .Value = value}
        Params.Add(NewParam)
    End Sub

    Public Sub AddParam(Name As String, Value As Object)
        Dim NewParam As New OleDbParameter(Name, Value)
        Params.Add(NewParam)
    End Sub

    'Schema Restrictions
    ' https://msdn.microsoft.com/en-us/library/cc716722%28v=vs.100%29.aspx

    Public Function GetTables() As List(Of String)
        Dim lstTables As New List(Of String)
        Dim restrictions As String() = New String() {Nothing, Nothing, Nothing, "TABLE"}

        Try
            Using conn As New OleDbConnection(connStr)
                conn.Open()
                DBDT = conn.GetSchema("Tables", restrictions)

                For Each r As DataRow In DBDT.Rows
                    lstTables.Add(r("TABLE_NAME").ToString()) ' Add .ToString()
                Next
            End Using

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

        Return lstTables

    End Function

    Public Function GetColumnsByTable(tableName As String) As List(Of String)
        Dim lstColumns As New List(Of String)
        Dim restrictions As String() = New String() {Nothing, Nothing, tableName, Nothing}

        Try
            Using conn As New OleDbConnection(connStr)
                conn.Open()
                DBDT = conn.GetSchema("Columns", restrictions)

                For Each r As DataRow In DBDT.Rows
                    lstColumns.Add(r("COLUMN_NAME").ToString()) ' Add .ToString()
                Next

            End Using

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

        Return lstColumns

    End Function

End Class

我无法对其进行测试,但希望它能为您提供足够的信息来修复您的代码。

(虽然 MemoryStream 有一个 Dispose 方法,但在这种情况下您不需要调用它。)