Команда SQL для использования SUM () с предложением Where - PullRequest
0 голосов
/ 07 июля 2019

Пожалуйста, я печатаю с телефона, потому что у меня нет ноутбука, не снижайте свою репутацию.

У меня есть столбец в базе данных SQL-сервера с именем Total_Amount, я хочу получить сумму (Total_Amount) за определенный день для конкретного кассира. Я могу получить только для конкретного кассира, но если я хочу использовать предложение WHERE для кассира и даты, он ничего не возвращает. Команда хорошо работает в SQL Server Management Studio, но из VB. нет, это не так.

Ниже приведен мой код.

         Dim conn As New SqlConnection("data. 
         source=PRECIOUSMUM\MSSQLSERVER_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

1 Ответ

0 голосов
/ 07 июля 2019

Первое, что явно неверно, это то, что вы используете строку для запроса столбца Date. Это никогда не правильно, потому что строка - это то, что вы используете для отображения даты для ваших конечных пользователей. Это не то, как база данных (или .NET) хранит значение даты. Таким образом, столбец Date не запрашивается с использованием строки, а передает непосредственно значение C # DateTime в методе Add и указывает DataType параметра. Вторая возможная ошибка вызвана тем фактом, что если вы также сохранили часть времени, то передача даты, такой как сегодня, никогда не будет совпадать ни с одной строкой, а только с теми, которые имеют значение времени 00:00:00.

Вам необходимо запросить> = полночь даты начала и <следующего дня. </p>

Это соображение даст запрос, подобный этому:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...