【问题标题】:VB.net Disconnected TableVB.net 断开表
【发布时间】:2013-12-27 19:04:14
【问题描述】:

我正在尝试将配置设置加载到一组数据表中,然后断开与数据库的连接。我确定我做错了什么,因为 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 函数上做错了。我认为我没有正确克隆和断开连接?

无论如何...我相信这很简单,因为我不是编码专家 :)

谢谢。

【问题讨论】:

  • 无需克隆。数据表已经是一个断开的对象

标签: sql vb.net datatable


【解决方案1】:

错误正是Clone method。它克隆数据表结构,而不是数据。

DataTable.Clone: 克隆 DataTable 的结构,包括所有 DataTable 架构 和约束。

如果你想要你需要的数据,请使用Copy method

DataTable.Copy:复制此 DataTable 的结构和数据。

但是,正如我在评论中所说,您不需要以这种方式浪费 PC 的内存。 ADO.NET 基于断开连接的模型。适配器填充的数据集中存在的数据表已经与数据库断开连接,您可以直接返回索引为零的表,而无需任何无用的复制/克隆。

【讨论】:

  • aaarrrggghhh!我知道这很容易 :) 谢谢史蒂夫。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多