主頁 > 軟體設計 > 將多個影像作為緩沖區/記憶體流同時保存到同一個表中

將多個影像作為緩沖區/記憶體流同時保存到同一個表中

2022-04-05 21:43:17 軟體設計

我對編碼比較陌生,完全是自學的,所以請耐心等待。
我一直在網上搜索這個問題的答案,但我發現的所有東西要么太技術性了,看起來像古希臘,要么甚至不適用于我的情況。

我正在為我的經理開發一個作業應用程式來記錄員工資訊。我目前正在處理的頁面是針對受傷的,但是如果我能弄清楚,這將適用于多個頁面。我知道我可能過于復雜了一些事情,這將是一個愚蠢的答案,但我已經嘗試了到目前為止我能想到的一切。

我正在嘗試做的是將手寫筆記捕獲為影像,然后將它們保存到資料庫中,以便我們在辦公室輸入并在需要時進行翻譯。(我的很多經理都不打字),但這也適用于收集多個簽名,即在書面記錄中。

我已經保存了影像,但是當需要將它們寫入資料庫時??,第一張影像會寫得很好,但是第二張我開始收到“標準運算式中的資料型別不匹配”錯誤。

我已經嘗試隔離第二張和第三張影像以查看它是否是語法問題,但我仍然收到錯誤訊息。我重建了資料庫表以確保目標欄位是 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(v=vs.100).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

我得到的錯誤是 將多個影像作為緩沖區/記憶體流同時保存到同一個表中

It happens after I go through my app and his "Submit" and it runs the Insert Into statement into the Access Database. I have rebuilt the columns in Access to make sure they're the right datatype and I hadn't accidentally changed something somewhere. That didn't help. The 1st image will save, but 2nd and 3rd images get this error. I've tried not including the 1st image. completely deleted it from the Insert into statement, I figured if I did that, then Image 2 would save, but not 3. no- both of them still didn't save. Got the same error. I tried removing both images 1 and 2 to see if just image 2 was problematic. Same error. At that point the computer almost went out the window.

Here is the error I got after removing the Catch Statement.

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]

Newest error 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

And still getting the same "Data Criteria Mismatch" error. I'm gonna start banging my head on my desk.

  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

Here's what I have in Access. Maybe someone can see if the problem's there. I don't think it should be though. I've rebuilt this table already to make sure it had the data types I wanted in case I had fat fingered something.

將多個影像作為緩沖區/記憶體流同時保存到同一個表中

I did test the entire thing before I started with the images as I knew I was venturing into new territory with them, and everything worked ok at that time, so I can safely say it's the images causing the issue.
It may be an access thing. I tend to dream big on these things and then have to get brought back down to reality when I find out Access isn't capable of doing what I wanted it to do. Sql is not an option in this case as the guys are in a barn with a spotty internet connection as it is, so I have to keep things as local as possible.

uj5u.com熱心網友回復:

一些物體使用“非托管資源”,需要通過對它們呼叫Dispose()來明確處理這些資源。有一種方法可以自動為您實作:Using陳述句。

碰巧的是,資料庫連接(例如 OleDbConnection)和 Image 型別都是這樣的物體。

以下是如何修改代碼的示例:

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(v=vs.100).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 方法,但這是您不需要呼叫它的一種情況。)

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/455664.html

標籤:vb.net

上一篇:使用RestSharp的Post方法在回傳請求中出錯

下一篇:如何在vb.netcore中打開Word模板、更新一些文本并保存為.pdf

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more