在图表中显示时间戳而不是日期-SQL

时间:2019-01-09 12:43:48

标签: vb.net charts

我正在为客户处理数据。

我制作了一个图表,显示了来自SQL Server的数据。
在我的x轴上,我有一个日期,但整列中还包含一个时间戳,例如“ 08/01/2019 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)

更新:19年1月1日

在@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

2 个答案:

答案 0 :(得分:0)

Markus的评论起到了作用:)参见更新。 我如何评价您的回答?

答案 1 :(得分:0)

您需要Dispose所有与数据库相关的对象(连接,命令,读取器)。最好为此使用Using,而不要在Finally中手动进行操作。
您必须使用参数而不是string concatenation。这样一来,您也不会丢失一天的最后一秒(在第二天的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