如何在SQL中比较和返回多个值

时间:2018-05-30 11:51:04

标签: sql vb.net

我有一个SQL数据库,其中包含[ServiceDate],[CLID],[Reading],[DueAmt],[PaidAmt],[Balance]和[Status]字段。我们的想法是选择过去4个月未支付的帐户,并使用VB.Net(VS18 IDE)将结果输出到Listivew控件。我需要有关如何使用VB.Net在Visual Studio IDE中编写此查询的示例或参考的帮助。

我访问的大多数其他平台都没有提供足够的解释性说明和代码来获取我应该做的事情并从中学习。另外,我希望将Listview控件中ServiceDate的列格式化为short date,DueAmt,PaidAmt和Balance to Currency。

我将不胜感激任何帮助 谢谢。

1 个答案:

答案 0 :(得分:1)

我假设SQL Server,[ServiceDate]作为数据库中的DataTime而[Balance]作为数据库中的某种数字。

Private Function GetOldAccounts() As DataTable
        Dim dt As New DataTable
        Using cn As New SqlConnection("Your connection string")
            Using cmd As New SqlCommand("Select * From YourTable Where [ServiceDate] < @d AND  [Balance] > 0")
                cmd.Parameters.Add("@d", SqlDbType.DateTime).Value = DateTime.Now.AddMonths(-4)
                cn.Open()
                Using dr As SqlDataReader = cmd.ExecuteReader
                    If dr.HasRows Then
                        dt.Load(dr)
                    Else
                        Return Nothing
                    End If
                End Using
            End Using
        End Using
        Return dt
    End Function

我以为你能找到如何从DataTable中填充ListView。 ListViews显示一个文本属性,它是一个字符串。如果需要键入的列,请查看可轻松绑定到DataTable的DataGridView。

Private Sub FillListView()
        Dim dt As DataTable = GetOldAccounts()
        lv.Items.Clear()
        Dim lstAccounts As New List(Of ListViewItem)
        lv.BeginUpdate() 'keeps the control from repaintinng on every iteration
        For Each r As DataRow In dt.Rows
            Dim li As New ListViewItem()
            li.Text = CDate(r("ServiceDate")).ToShortDateString
            li.SubItems.Add(r("CLID").ToString)
            li.SubItems.Add(r("Reading").ToString)
            li.SubItems.Add(r("DueAmt").ToString)
            li.SubItems.Add(CDec(r("PaidAmt")).ToString("N2"))
            li.SubItems.Add(CDec(r("Balance")).ToString("C")) 'Will include the $
            li.SubItems.Add(r("Status").ToString)
            Dim i As Integer
            Dim s As String = i.ToString("C")
            lstAccounts.Add(li)
        Next
        lv.BeginUpdate() 'keeps the control from repaintinng on every addition
        lv.Items.AddRange(lstAccounts.ToArray)
        lv.EndUpdate()
    End Sub