我正在尝试将配置设置加载到一组DataTable中,然后断开与数据库的连接。我确定我做错了,因为之后DataTables是空的。这是代码:
从课程顶部开始:
'Set up Configuration DataTables
Dim dtDataAlerts As New DataTable
运行例程以获取数据:
Public Sub ReadDataAlerts()
'Read the configuration for the Data Alerts from the RDB
dtDataAlerts = GetRecordSet("SELECT DataAlertGroups.DataAlertGroup_UID, DataAlertGroups.EmailGroup_UID, DataAlertGroups.EmailTemplate_UID, EmailTemplates.EmailTemplate_CustomSubject, EmailTemplates.EmailTemplate_CustomMessage FROM (DataAlertGroups INNER JOIN EmailGroups ON DataAlertGroups.EmailGroup_UID=EmailGroups.EmailGroup_UID) INNER JOIN EmailTemplates ON DataAlertGroups.EmailTemplate_UID=EmailTemplates.EmailTemplate_UID")
End Sub
获取DataTable的例程
Function GetRecordSet(SQLString As String) As DataTable
'function used to run a query and return a disconnected DataTable
Try
'Create Dataset, Open Connection
Dim dsPWC As New DataSet()
Dim OleDbDataAdapter1 As System.Data.OleDb.OleDbDataAdapter = New System.Data.OleDb.OleDbDataAdapter(SQLString, sqlConn)
sqlConn.Open()
'Fill the Dataset with the PlantWatchConfiguration Table
OleDbDataAdapter1.Fill(dsPWC, "CollectorAlertGroups")
'Create Table from Dataset and iterate data
Dim DT As New DataTable
Dim DTClone As New DataTable
DT = dsPWC.Tables(0)
DTClone = DT.Clone
'Close Connection
sqlConn.Close()
Return DTClone
Catch ex As Exception
WriteToLog(ex.Message, "GetRecordSet")
End Try
End Function
我知道SQL是正确的,因为我已经针对RDB运行它并产生结果。我在代码中有大量的日志记录文件,因此我确信数据库正确连接。 (和其他直接查询拉回数据一样好)
但我在GetRecordSet函数上做错了。我在想我没有正确地克隆和断开连接?
无论如何......我确信这很简单,因为我不是编码专家:)
感谢。
答案 0 :(得分:1)
错误恰好是Clone method。它克隆数据表结构,而不是数据。
DataTable.Clone:克隆DataTable的结构,包括所有DataTable模式 和约束。
如果您需要数据,请使用Copy method。
DataTable.Copy:复制此DataTable的结构和数据。
但是,正如我在评论中所说,你不需要以这种方式浪费你的电脑内存。 ADO.NET 基于断开连接的模型。由适配器填充的数据集中存在的数据表已经与数据库断开连接,您可以直接返回索引为零的表,而不会有任何无用的副本/克隆。