请我从手机中打字,因为我不在笔记本电脑上,不要降低声誉。
我在我的SQL Server数据库中有一个名为total_amount的列,我想获得特定收银员的特定日期(total_amount(。我只能获得特定的收银员,但是如果我想在收银员和日期都使用Where子句,那将一无所获。该命令在SQL Server Management Studio中运行良好,但在VB中运行。网络没有。
以下是我的代码。
Dim conn As New SqlConnection("data.
source=PRECIOUSMUMMSSQLSERVER_1; initial.
catalog=inventory; user id=mantics;
password=emudeji;")
Try
'Dim Total_Amountss As Double
conn.Open()
Dim cmd = New SqlCommand
With cmd
.Connection = conn
.CommandText = "SELECT SUM(Total_Amount)
AS Total_Amount FROM tblOrder WHERE.
(cashier=@cashier) AND (Order_date=@Order_date)"
.Parameters.AddWithValue("@cashier",
lbl_Cashier_Name.Text)
.Parameters.AddWithValue("@Order_date", Date.Today.ToString)
'.Parameters.AddWithValue("@enddate", dtpicker.Value.Date)
End With
Dim dr As SqlDataReader
dr = cmd.ExecuteReader
dr.Read()
If IsDBNull(dr("Total_Amount")) Then
lbl_cashier_Totalsales.Text = "N0.00"
Else
Dim str As Double
str = dr.Item("Total_Amount")
lbl_cashier_Totalsales.Text = FormatCurrency(dr.Item("Total_Amount"))
End If
显然是错误的第一件事是您使用字符串查询日期列。这是永远不正确的,因为字符串是您用来向最终用户显示日期的东西。这不是数据库(或.NET(存储日期值的方式。因此,不是使用字符串查询日期列,而是直接传递添加方法中的C#DateTime值并指定参数的数据类型。第二个可能的错误是由于您还存储了时间零件,然后通过今天的日期将永远不会匹配任何行,而只有一个将00:00:00作为其时间值匹配的事实。
您需要查询> =起始日期的午夜和<第二天。
此考虑将给出这样的查询:
With cmd
.Connection = conn
.CommandText = "SELECT SUM(Total_Amount) AS Total_Amount
FROM tblOrder
WHERE (cashier=@cashier) AND
(Order_date >= @StartDate AND
Order_date < @EndDate)"
.Parameters.Add("@cashier", SqlDbType.NVarChar).Value = lbl_Cashier_Name.Text
.Parameters.Add("@StartDate", SqlDbType.DateTime).Value = Date.Today
.Parameters.Add("@EndDate", SqlDbType.DateTime).Value = Date.Today.AddDays(1)
End With