0

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

我可以在其中动态更新“测量”和“H”和“V 标签”的值。问题是:如何声明此 SelectionQuery 为 TA 的有效部分,以便我可以像这样使用它:

Me.ItemFactTableAdapter.SelectionQuery (Me.MasterDataSet.ItemFact) 
4

2 回答 2

1

对于动态查询,您需要创建通用 DataAdapter:

 Dim da As New SqlDataAdapter(SelectionQuery, Me.ItemFactTableAdapter.Connection)
 da.Fill(Me.MasterDataSet.ItemFact)
于 2013-10-02T13:20:44.517 回答
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
于 2013-10-03T11:00:39.167 回答