[英]Optimize this Database Code (Vb.Net)
所以我有在 Vb.Net 项目中运行的代码,该项目从 Access 数据库 (2007) 的表中读取特定列。 然后用结果填充 Datagridview。 问题是代码很乱,我正在处理所有事件……等等。 有没有办法优化它? 从我读到的内容来看,我可以使用“using”命令,但在尝试实现它时遇到了问题。 任何有关清理此代码的帮助都是相关联的。
Sub Populate_RecordsList_Via_Database()
'Create a connection to the database
Dim strConnection As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=SBS2257_Info.accdb;"
Dim objConnection As New OleDbConnection(strConnection)
'Open the connection with error handling
Try
objConnection.Open()
Catch OleDbExceptionErr As OleDbException
MessageBox.Show(OleDbExceptionErr.Message)
Catch InvalidOperationErr As InvalidOperationException
MessageBox.Show(InvalidOperationErr.Message)
End Try
'Create a command object with the SQL statement needed to select the first and last names
Dim strSQL As String = "SELECT [RecordID], [FName], [LName], [SBAlias1] FROM [Records];"
Dim objCommand As New OleDbCommand(strSQL, objConnection)
'Create a data adapter and data table then fill the data table
Dim objDataAdapter As New OleDbDataAdapter(objCommand)
Dim objDataTable As New DataTable("Info")
objDataAdapter.Fill(objDataTable)
'close connection and release resources
objConnection.Close()
objConnection.Dispose()
objConnection = Nothing
objCommand.Dispose()
objCommand = Nothing
objDataAdapter.Dispose()
objDataAdapter = Nothing
'Populate datagridview
For Each row As DataRow In objDataTable.Rows
Dim n As Integer = DGV_ListView.Rows.Add()
DGV_ListView.Rows.Item(n).Cells(0).Value = row.Item("RecordID")
DGV_ListView.Rows.Item(n).Cells(1).Value = row.Item("FName")
DGV_ListView.Rows.Item(n).Cells(2).Value = row.Item("LName")
DGV_ListView.Rows.Item(n).Cells(3).Value = row.Item("SBAlias1")
Next
'Release resources
objDataTable.Dispose()
objDataTable = Nothing
End Sub
using 语句对于一次性对象非常有用。 这意味着实现 IDisposable 接口的每个类都应该释放在其生命周期中获得的非托管资源。
然而,在ADO.NET 中没有非托管资源,因此并不真正需要处理 OleDbDataAdapter 和 DataTable,而非常推荐围绕 DbConnection 基类派生的类。
所以你修改后的代码可能是这样的
Sub Populate_RecordsList_Via_Database()
Dim strSQL As String = "SELECT [RecordID], [FName], [LName], [SBAlias1] FROM [Records];"
Dim strConnection As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=SBS2257_Info.accdb;"
Try
Using objConnection = New OleDbConnection(strConnection)
Using objCommand = New OleDbCommand(strSQL, objConnection)
'Using objDataAdapter = New OleDbDataAdapter(objCommand)
Dim objDataTable As New DataTable("Info")
objDataAdapter.Fill(objDataTable)
' No need to loop over the datatable, just assign it to the DataSource property
DGV_ListView.DataSource = objDataTable
'End Using
End Using
End Using
Catch OleDbExceptionErr As OleDbException
MessageBox.Show(OleDbExceptionErr.Message)
Catch InvalidOperationErr As InvalidOperationException
MessageBox.Show(InvalidOperationErr.Message)
End Try
End Sub
请注意,try/catch 包含所有内容,而不仅仅是连接的打开,因为您永远无法判断在这种情况下哪里会出现异常情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.