【问题标题】:VB.Net how to change variable based on counterVB.Net如何根据计数器更改变量
【发布时间】:2014-09-18 04:33:51
【问题描述】:

我有一个 For Next 循环,它将连接到数据库,然后搜索结果并将结果分配给一个变量。现在我以消息框的形式显示它。我希望该变量随计数器而改变

我的程序:

For x = 1 to 5

            dtstartdate = dtpStartDate.Value
            dtenddate = dtpEndDate.Value.AddDays(1).AddSeconds(-1)


            Try
                connetionString = "Data Source=..."
                sql = "Select * discounts"
                connection = New SqlConnection(connetionString)
                connection.Open()
                command = New SqlCommand(sql, connection)
                adapter.SelectCommand = command
                adapter.SelectCommand.CommandTimeout = 130
                adapter.SelectCommand.Parameters.AddWithValue("@StartDate", dtstartdate)
                adapter.SelectCommand.Parameters.AddWithValue("@EndDate", dtenddate)
                adapter.Fill(ds)
                connection.Close()
                connection.Dispose()

            Catch ex As Exception
                MsgBox(ex.Message)

        For Each Result As DataRow In ds.Tables(0).Rows
            Select Case Result("Report")
                Case "TOTALS"
                    Select Case Result("Description")
                        Case "Coupons", "Coupons Tax-Free", "GC"
                            sum = sum + (Result("netAmt"))
                    End Select

            End Select
        Next

下一个

我将如何分配“SUM”来更改每个循环。例如:

如果 x 为 1,我希望“Sum”为“Sum1”:

For Each Result As DataRow In ds.Tables(0).Rows
                Select Case Result("Report")
                    Case "TOTALS"
                        Select Case Result("Description")
                            Case "Coupons", "Coupons Tax-Free", "GC"
                                sum1 = sum1 + (Result("netAmt"))
                        End Select

                End Select

如果 x 为 2,我希望 sum 为 sum2

For Each Result As DataRow In ds.Tables(0).Rows
                Select Case Result("Report")
                    Case "TOTALS"
                        Select Case Result("Description")
                            Case "Coupons", "Coupons Tax-Free", "GC"
                                sum2 = sum2 + (Result("netAmt"))
                        End Select

                End Select

如此等等。在程序结束时,我将在报表上显示“Sum1”、“Sum2”、“Sum3”。

【问题讨论】:

标签: vb.net


【解决方案1】:

为 sum 变量使用数组。无需更改变量的名称 (sum1, sum2, sum3),您只需更改数组的索引 ( sum(1), sum(2), sum(3)... 看起来像 sum( x) ) 并将您的值存储在这些索引中。

【讨论】:

  • 这正是我想要的。谢谢!
【解决方案2】:

我要更改的第一件事是您的查询。
如果我没记错的话,您只对Report 字段包含单词'TOTALS'Description 字段包含单词'Coupons' or 'Coupons Tax-Free' or 'GC' 的行感兴趣。

因此您可以更改查询以表达 WHERE 条件。
这将大大减少返回的行数和最终总数的复杂性。
(顺便问一下,你确定不需要增加@startDate 参数吗?)

第二件事是使用 List(Of Double) 而不是单个变量

Dim sumTotals = new List(Of Double)()
For x = 1 to 5
   ....
   sql = "Select * discounts WHERE Report = 'TOTALS' " & _ 
                             "AND Description IN('Coupons', 'Coupons Tax-Free, 'GC'"
   ....

   Dim partialSum As Double
   For Each Result In ds.Tables(0).Rows
       partialSum = partialSum + (Result("netAmt"))
   Next
   sumTotals.Add(partialSum)
Next

现在,在 For 循环的末尾,您有一个包含 5 个双精度值(每天一个)的列表,您可以将其用作普通数组

For each x in sumTotals
   Console.WriteLine(x)
Next
....

或者应用一个 Linq 扩展

Dim grandTotal = sumTotals.Sum()

【讨论】:

  • 我对更改查询不感兴趣。我最终将使用存储过程来提取报告并从结果查询中挑选我正在寻找的项目。我宁愿通过 vb 来做,也不愿从 VB 做 10 个不同的数据库查询。
猜你喜欢
  • 2019-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
相关资源
最近更新 更多