如何按 MS Access 的特定月份汇总特定列数据并进入 vb.net 中的文本框
Posted
技术标签:
【中文标题】如何按 MS Access 的特定月份汇总特定列数据并进入 vb.net 中的文本框【英文标题】:How to sum of specific column data by specific month of MS Access and get to textbox in vb.net 【发布时间】:2019-09-07 06:56:27 【问题描述】:无法获取特定月份的列值总和。
我试图从 MS Access 获取数据到文本框或标签,但结果只有空白。
Dim Month As String = dtInput.Value.ToString("MMM")
Dim rs As ADODB.Recordset
Dim str As String = ""
str = "Select Sum(Input_Amount) FROM Input_Paid Where Month(Dt_Entry)='" & Month & "'"
rs = New ADODB.Recordset
dbconnect1()
rs.Open(str, conne, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockPessimistic)
lblInputtotalInputDeposite.Text = "Total Deposit Input this Month - " & rs.Fields(0).Value
rs.Close()
rs = Nothing
我除了输出不是空白之外,这里有一些结果:
(rs.Fields(0).Value)
【问题讨论】:
不同的是,您将缩写的月份名称与月份数进行比较 【参考方案1】:永远不要使用文字进行月份过滤,因为它们是本地化的:
Dim Month As Integer = dtInput.Value.Month()
Dim Year As Integer = dtInput.Value.Year()
Dim rs As ADODB.Recordset
Dim str As String = ""
str = "Select Sum(Input_Amount) FROM Input_Paid Where Year(Dt_Entry) = " & Year & " And Month(Dt_Entry) = " & Month & ""
dbconnect1()
rs = New ADODB.Recordset
rs.Open(str, conne, ADODB.CursorTypeEnum.adOpenStatic, DODB.LockTypeEnum.adLockPessimistic)
lblInputtotalInputDeposite.Text = "Total Deposite Input on this Month - " & rs.Fields(0).Value
rs.Close()
rs = Nothing
【讨论】:
【参考方案2】:现在,让我们用 ADO.net 的方式来做吧。
将您的数据库对象保存在本地,以便您可以控制那里的打开、关闭和处理。后两个是通过 Using...End Using 块完成的。
要获得有关连接字符串的帮助,请参阅https://www.connectionstrings.com/
使用参数来避免sql注入是个好主意。 Access 不关心参数名称。如果只关心它们在命令文本中出现的顺序是否与它们添加到参数集合中的顺序相匹配。
ExecuteScalar 返回结果集中第一行的第一列。在这种情况下,总和。它返回一个对象,因此需要转换为小数。
只有在连接关闭后,我们才会更新用户界面。我使用了一个插值字符串。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim Total As Decimal
Using cn As New OleDbConnection("Your connection string")
Using cmd As New OleDbCommand("Select Sum(Input_Amount) FROM Input_Paid Where Month(Dt_Entry)= @Month And Year(Dt_Entry) = @Year;", cn)
cmd.Parameters.Add("@Month", OleDbType.Integer).Value = dtInput.Value.Month
cmd.Parameters.Add("@Year", OleDbType.Integer).Value = dtInput.Value.Year
cn.Open()
Total = CDec(cmd.ExecuteScalar)
End Using
End Using 'closes and disposes the connection
lblInputtotalInputDeposite.Text = $"Total Deposit Input this Month is Total"
End Sub
【讨论】:
以上是关于如何按 MS Access 的特定月份汇总特定列数据并进入 vb.net 中的文本框的主要内容,如果未能解决你的问题,请参考以下文章
如何让 MS Access 以特定时间间隔从 .txt 文件中读取?