我正在为客户处理数据。
我制作了一个图表,显示了来自SQL Server的数据。
在我的x轴上,我有一个日期,但整列中还包含一个时间戳,例如“ 08/01/2019 14:34”,但不可见。
如下面的链接图片所示,如果可能的话,如何格式化x轴值以仅显示时间或dbo中的整个值?
我是否必须格式化屏幕上图表的大小,如果是,我该怎么做?我试图在图表设置中寻找一个选项。
这是代码段:
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
答案 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