开发者社区 问答 正文

编写VB.Net代码以过滤SQL Server表属性

我的SQL Server表中有几列,并希望过滤“承包商”列。用户可以在“承包商”列中选择两个名称“ Namal”和“ other”,如屏幕截图所示。

我想要的是仅对“ Namal”而不是“ other”获得“金额”的总和

这是我编写但无法正常工作的代码。这里@d1和@d2是可以选择用户的日期范围。


Imports System.Data.SqlClient
Public Class Form6
    Dim connection As New SqlConnection("server=(local); Database=Luminex; integrated security=true")

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim table As New DataTable()
        Dim command As New SqlCommand("select sum(Amount) as a  from PeoTVDB where Date between @d1 and @d2 and Contractor= @Namal", connection)

        command.Parameters.Add("@d1", SqlDbType.Date).Value = DateTimePicker1.Value
        command.Parameters.Add("@d2", SqlDbType.Date).Value = DateTimePicker2.Value

        Dim adapter As New SqlDataAdapter(command)
        adapter.Fill(table)

        Label1.Text = table.Rows(0)("a").ToString()    

    End Sub        
End Class

展开
收起
Puppet 2020-01-04 11:12:26 757 分享
分享
版权
举报
1 条回答
写回答
取消 提交回答
  • 使数据库对象在使用它们的方法本地。如果在多个地方使用连接字符串,则将其放置为类级别变量。

    数据库对象需要关闭和处置。Using...End Using即使有错误,块也会为您处理。

    我以为Date可能是Sql Server中的保留字,所以我用方括号将其转义。即使没有保留,也不会伤害任何东西。

    我很高兴看到Parameters和.Add方法。唯一的问题是您忘记了一个。我不得不猜测类型和值是什么。

    由于您只请求单个数据,.ExecuteScalar因此可以使用返回一个对象,从而CDec()

    
    Private ConString As String = "server=(local); Database=Luminex; integrated security=true"
    
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim Amount As Decimal
        Using connection As New SqlConnection(ConString),
            command As New SqlCommand("select COALESCE(sum(Amount), 0) as a  from PeoTVDB where [Date] between @d1 and @d2 and Contractor= @Namal", connection)
            command.Parameters.Add("@d1", SqlDbType.Date).Value = DateTimePicker1.Value
            command.Parameters.Add("@d2", SqlDbType.Date).Value = DateTimePicker2.Value
            command.Parameters.Add("@Namal", SqlDbType.NVarChar, 200).Value = "Some Value"
            connection.Open()
            Amount = CDec(command.ExecuteScalar)
        End Using
        Label1.Text = Amount.ToString
    End Sub
    
    2020-01-04 11:12:52 举报
    赞同 评论

    评论

    全部评论 (0)

    登录后可评论