我的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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
使数据库对象在使用它们的方法本地。如果在多个地方使用连接字符串,则将其放置为类级别变量。
数据库对象需要关闭和处置。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
评论
全部评论 (0)