我對編碼比較陌生,完全是自學的,所以請耐心等待。
我一直在網上搜索這個問題的答案,但我發現的所有東西要么太技術性了,看起來像古希臘,要么甚至不適用于我的情況。
我正在為我的經理開發一個作業應用程式來記錄員工資訊。我目前正在處理的頁面是針對受傷的,但是如果我能弄清楚,這將適用于多個頁面。我知道我可能過于復雜了一些事情,這將是一個愚蠢的答案,但我已經嘗試了到目前為止我能想到的一切。
我正在嘗試做的是將手寫筆記捕獲為影像,然后將它們保存到資料庫中,以便我們在辦公室輸入并在需要時進行翻譯。(我的很多經理都不打字),但這也適用于收集多個簽名,即在書面記錄中。
我已經保存了影像,但是當需要將它們寫入資料庫時??,第一張影像會寫得很好,但是第二張我開始收到“標準運算式中的資料型別不匹配”錯誤。
我已經嘗試隔離第二張和第三張影像以查看它是否是語法問題,但我仍然收到錯誤訊息。我重建了資料庫表以確保目標欄位是 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 83This 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
