我在Visual Studio中设置了一个链接到SQL Server数据库的表适配器。 我已经按照MSDN教程进行操作,并为此TA手动设置了一些查询。我认为这些查询是“pre_hardcoded”。我使用默认代码调用这些查询:
Me.ItemFactTableAdapter.My_Pre_Hardcoded_Query(Me.MasterDataSet.ItemFact)
我想动态调用不同配置的数据(来自同一主表),因此我需要大量这些预先硬编码的查询。所以,我不想写1k查询,而是想使用这样的东西:
TableName = "ItemFact"
H_Label = "ChainName"
V_Label = "ItemName"
Dim Measure As String = "Volume"
Dim Select_Clause As String = "select distinct " & H_Label & "," & V_Label & ", Sum(" & Measure & ") as " & Measure & " "
Dim From_Clause As String = "from " & TableName & " "
Dim Where_Clause As String = ""
Dim GroupBy_Clause As String = "group by " & H_Label & "," & V_Label
Dim SelectionQuery = Select_Clause & From_Clause & Where_Clause & GroupBy_Clause
我可以动态更新“Measure”和“H”&的值。 “V标签”。 问题是:如何将此SelectionQuery声明为TA的有效部分,以便我可以像以下一样使用它:
Me.ItemFactTableAdapter.SelectionQuery (Me.MasterDataSet.ItemFact)
答案 0 :(得分:1)
对于动态查询,您需要创建通用DataAdapter:
Dim da As New SqlDataAdapter(SelectionQuery, Me.ItemFactTableAdapter.Connection)
da.Fill(Me.MasterDataSet.ItemFact)
答案 1 :(得分:0)
我仍然没有找到关于如何向桌面适配器添加查询的初始问题的答案,但基于@lomed的答案,我已经做了一个解决方法。因此,我不是在第一次加载时填充TA,然后使用不同的查询来提取数据,而是在每个查询上更新整个数据集。我相信这种方法在应用于大数据集时可能会更耗时,但现在它可以工作。
Dim strConn As String = "Data Source=XXX;Initial Catalog=master;Integrated Security=True"
Dim conn As New SqlConnection(strConn)
Dim oCmd As New SqlCommand(SelectionQuery, conn)
Dim oData As New SqlDataAdapter(SelectionQuery, conn)
Dim ds As New DataSet
然后将数据集附加到以下对象:
Chart1.DataSource = ds.Tables("Table1")
而不是:
Chart1.DataSource = Me.ItemFactBindingSource