我有SQL SP用于在VB中填充DataTables以及用VB填充列表框/图表等。在VB中我试图使用OOP,因此使用类变量。在VB中我有一个函数,用于使用SP提取数据的代码,这个函数我想在每次拉数据时使用,所以每次不同的数据请求都会向函数发送不同的输入,参数。
我可以为整数数据类型的输入参数实现这一点,但我仍然坚持为DataTable类型做同样的事情。如果我可以,我想使用相同的DataTable,但是当你再次运行该函数来填充另一个容器(列表框,然后是图表等)时,第一个容器会丢失它的数据并且为空,因为DataTable加载了新数据。在第一个数据集用于填充第一个容器之后,这是当前的。这让我认为DataTable有一个“永久”链接到容器以保持其填充?
这导致我尝试声明多个DataTable并为每个容器传递一个不同的DataTable。在这里,我得到了声明和传递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参数。任何提示将不胜感激。
谢谢,
答案 0 :(得分: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(...)
最后,在使用SqlConnection
,SqlDataAdapter
和SqlCommand
类时,不要共享它们。每次需要时都会创建新的将它们包装在Using
语句中,如下所示:
Using conn As New SqlConnection(cString)
Using aDapter As New SqlDataAdapter(...)
' and so on
End Using
End Using