1

我有用于在 VB 中填充数据表的 SQL SP,以及用于在 VB 表单中填充列表框/图表等的 SQL SP。在 VB 中,我尝试使用 OOP,因此使用类作为变量。在 VB 中,我有一个函数,其中包含使用 SP 提取数据的代码,我想在每次提取数据时使用这个函数,所以对于每个不同的数据请求,你都会向函数发送不同的输入和参数。

我可以为整数数据类型的输入参数实现这一点,但是我坚持对 DataTable 类型做同样的事情。如果可以的话,我想使用相同的 DataTable,但是当您再次运行该函数以填充另一个容器(列表框,然后是图表等)时,第一个容器会丢失它的数据并且是空的,因为 DataTable 加载了新数据。这当然是在使用第一个数据集填充第一个容器之后。这让我认为 DataTable 有一个指向容器的“永久”链接来保持它的填充?

这导致我尝试声明多个 DataTables 并为每个容器传递一个不同的 DataTables。在这里,我遇到了声明和传递 DataTable 类型的问题。这个问题有什么解决办法吗?另一个问题是,是否可以有一个 DataTable 类?我使用 MS SQL Server 2012 和 MS Visual Studio 2010。

这是我填充 DataTable 的函数的外观:

Public Function outputData(ByVal beg_Date, ByVal end_Date, ByVal ID1, ByVal proC, ByRef dDataTable)
    If conn.State = ConnectionState.Open Then pData.Clear()

    SQLcomm = New SqlClient.SqlCommand(proC, conn)
    SQLcomm.CommandType = CommandType.StoredProcedure
    SQLcomm.Parameters.AddWithValue("@begDate", SqlDbType.Date).Value = beg_Date
    SQLcomm.Parameters.AddWithValue("@endDate", SqlDbType.Date).Value = end_Date
    SQLcomm.Parameters.AddWithValue("@ID1", SqlDbType.Int).Value = ID1


    aDapter.SelectCommand = SQLcomm
    aDapter.Fill(dDataTable)

    Return pData

End Function

proC 是 SQL 过程参数,dDataTable 是 DataTable 参数。任何提示将不胜感激。

谢谢,

4

1 回答 1

2

DataTable你可以通过简单地从这个函数返回一个新的来让你的生活更轻松。考虑一下:

Public Function outputData(ByVal beg_Date, ByVal end_Date, ByVal ID1, ByVal proC)
    SQLcomm = New SqlClient.SqlCommand(proC, conn)
    SQLcomm.CommandType = CommandType.StoredProcedure
    SQLcomm.Parameters.AddWithValue("@begDate", SqlDbType.Date).Value = beg_Date
    SQLcomm.Parameters.AddWithValue("@endDate", SqlDbType.Date).Value = end_Date
    SQLcomm.Parameters.AddWithValue("@ID1", SqlDbType.Int).Value = ID1

    Dim dt As New DataTable()
    aDapter.SelectCommand = SQLcomm
    aDapter.Fill(dt)

    Return dt
End Function

您不会DataTable在消费者之间重用对象,因为是的,它们是引用类型,所以当您更改它们时,它就结束了。现在,如果您需要DataTable使用新查询来刷新您存储在其他地方的数据,那么您现在所要做的就是:

myCurrentDataTable = outputData(...)

最后,在使用SqlConnectionSqlDataAdapterSqlCommand类时 -不要共享它们。每次需要它们时都创建新的并将它们包装在一个Using语句中,如下所示:

Using conn As New SqlConnection(cString)
    Using aDapter As New SqlDataAdapter(...)
        ' and so on
    End Using
End Using
于 2013-09-19T15:05:46.277 回答