Показывать временную метку, а не дату на графике - SQL - PullRequest
0 голосов
/ 09 января 2019

Я работаю над страницей обработки данных для клиента.

Я создал диаграмму, которая показывает данные с моего сервера SQL.
На моей оси X у меня есть дата, но весь столбец содержит также временную метку, например, «01.08.2009 14:34», но не отображается.

Как показано на связанном рисунке ниже, как мне отформатировать значение оси x, чтобы показать только время или все значение из dbo, если это возможно?

Picture of chart with the date only

Нужно ли форматировать размер диаграммы на экране, если да, то как мне это сделать? Я пытался найти вариант в настройках графика.

Вот фрагмент кода:

Private Sub dgvSiteChart() 'Load data from dbo
    DateandTimeString24H = "'" & Date.Now.Year & "-" & Date.Now.Month & "-" & Date.Now.Day & " 00:00:00.000'" & " And " & "'" & Date.Now.Year & "-" & Date.Now.Month & "-" & Date.Now.Day & " 23:59:59.000'"
    SQLCon = New SqlConnection
    SQLCon.ConnectionString = "Data Source=" & System.Net.Dns.GetHostName() & "\KVMSQL;Initial Catalog=MHA;User ID=#####;Password =######"
    Dim READER As SqlDataReader

    Try
        SQLCon.Open()
        Dim Query As String
        Query = "SELECT DateAndTime,Tagindex,Val FROM dbo.FT WHERE tagindex=0 and DateAndTime between " & DateandTimeString24H & "ORDER BY DateAndTime"
        SQLCmd = New SqlCommand(Query, SQLCon)
        READER = SQLCmd.ExecuteReader
        While READER.Read
            chrtReportMchn.Series("LOG").Points.AddXY(READER("DateAndTime"), READER("Val"))
        End While
        SQLCon.Close()
    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
        SQLCon.Dispose()
    End Try
End Sub

Формат даты и времени dd/MM/yyyy HH:mm(24H).

ОБНОВЛЕНИЕ: 10 / 1-19

Я понял это с помощью @Markus с его комментарием. Код редактируется с помощью FORMAT(CAST(DateAndTime as time), 'hh\:mm\ '), поставленного перед DateAndTime.

Try
    SQLCon.Open()
    Dim Query As String
    Query = "SELECT FORMAT(CAST(DateAndTime as time), 'hh\:mm\ ') DateAndTime,Tagindex,Val FROM dbo.FT WHERE tagindex=0 and DateAndTime between " & DateandTimeString24H & "ORDER BY DateAndTime"
    SQLCmd = New SqlCommand(Query, SQLCon)
    READER = SQLCmd.ExecuteReader
    While READER.Read

1 Ответ

0 голосов
/ 18 января 2019

Вам необходимо Dispose все объекты, связанные с базой данных (соединения, команды, читатели). Для этого лучше использовать Using вместо того, чтобы делать это вручную в Finally.
Вы должны использовать параметры вместо конкатенации строк . Таким образом, вы также не потеряете последнюю секунду дня (между 23:59:59 и 00:00:00 следующего дня).
Вы можете использовать точку в строке подключения для представления локального компьютера.
Вам не нужно возвращать TagIndex, если вы его не используете.
Вы можете отформатировать дату на клиенте.

Private Sub dgvSiteChart()
    Try
        Using SQLCon = New SqlConnection("Data Source=.\KVMSQL;Initial Catalog=MHA;User ID=#####;Password =######")
            SQLCon.Open()
            Using SQLCmd = New SqlCommand("SELECT DateAndTime,Val FROM dbo.FT WHERE tagindex=0 and DateAndTime >= @from_inclusive and DateAndTime < @to_exclusive ORDER BY DateAndTime", SQLCon)
                Dim captured_date = DateTime.Today ' Because it may change if calling this around midnight

                SQLCmd.Parameters.Add("@from_inclusive", SqlDbType.DateTime).Value = captured_date
                SQLCmd.Parameters.Add("@to_exclusive", SqlDbType.DateTime).Value = captured_date.AddDays(1)

                Using READER = SQLCmd.ExecuteReader()
                    While READER.Read()
                        chrtReportMchn.Series("LOG").Points.AddXY(CType(READER("DateAndTime"), Date).ToShortTimeString(), READER("Val"))
                    End While
                End Using
            End Using
        End Using
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...