问:如何在Visual Studio中向表适配器动态添加查询

时间:2013-10-02 12:25:09

标签: sql visual-studio tableadapter

我在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) 

2 个答案:

答案 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