我用vs2010編寫的一個小工具,在利用vs2010附帶的chart生成圖表時出現無法解決的疑問。databindtable在綁定數據時總是會出現無法顯示曲線或者無法綁定的問題,如下描述:
數據庫結構:
列名 數據類型 是否可為NUll
id int型 主鍵標識 false
mac_id int false
value varchar(MAX) true
Hum varchar(MAX) true
time smalldatetime 主鍵 false
兩個主鍵id和time,其中id為標識序列。
測試用的數據如下。
id mac_id Value Hum time
1 101 20 NULL 2013/6/1 0:00:00
2 101 30 10 2013/6/2 0:00:00
3 102 40 10 2013/6/2 0:00:00
4 101 40 15 2013/6/3 0:00:00
5 102 50 20 2013/6/3 0:00:00
6 101 60 20 2013/6/4 0:00:00
代碼塊:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Chart1.Series.Clear()
Using cnn As New SqlConnection("Data Source=my-PC\SQLEXPRESS;Initial Catalog=master;Integrated Security=True")
Dim str As String = "SELECT id ,value, Hum, time AS t FROM Test WHERE mac_id = 101 ORDER BY t"
Dim cmd As New SqlCommand(str, cnn)
cnn.Open()
Dim reader As SqlDataReader = cmd.ExecuteReader
Me.Chart1.DataBindTable(reader, "t")
reader.Close()
cnn.Close()
For Each x In Me.Chart1.Series
x.ChartType = DataVisualization.Charting.SeriesChartType.Spline
Next
End Using
End Sub
運行後結果卻只有一條id的。根據databindtable的定義不是應該有id ,value, Hum三條Series麼?
然而 ,如果我將id 排除後,即sql的語句變為
Dim str As String = "SELECT value, Hum, time AS t FROM Test WHERE mac_id = 101 ORDER BY t"
執行後,獲得的chartAreas 區域卻是一片空白 !!
請問,這種情況是否正常,如何解決問題?
找到原因了,Y軸的值不能為value,只能為數字型,所以隱性的轉換是無效的。在原sql連接字符中需要進行修正: Dim str As String = "SELECT cast(value as numeric ) as V, CAST(ISNULL(Hum, 0) AS numeric) AS H, time AS t FROM Test WHERE mac_id = 101 ORDER BY t"
這樣就可以了