我在datatable
添加了一些列,如下所示。
OpenConnection()
Dim mmd As New MySqlCommand
Dim mq As String = "SELECT DISTINCT(FeeName) AS FName,UnderSubGroupId FROM master_fee WHERE UnderGroupId=1 ORDER BY UnderSubGroupId ASC"
mmd.Connection = conn
mmd.CommandText = mq
Dim dt As New DataTable
Dim mdr As MySqlDataReader = mmd.ExecuteReader
While mdr.Read
dt.Columns.Add(Replace(mdr("FName"), " ", "_"))
End While
mdr.Close()
CloseConnection()
现在准备查询以获取动态添加列的数据。
Dim dtfrm As String = Convert.ToDateTime(DtpFrom.Value).ToString("yyyy-MM-dd")
Dim dtto As String = Convert.ToDateTime(DtpTo.Value).ToString("yyyy-MM-dd")
OpenConnection()
Dim cmd As New MySqlCommand
Dim qry As String = "SELECT " & _
"DATE_FORMAT(fees_receiving_ledger.DateTaken, '%d/%m/%Y') AS TakenDate," & _
"fees_receiving_ledger.RcptNo AS Rcpt,"
Dim i As Integer = 1
Dim clm As String
Dim clmAmt As String
For Each column As DataColumn In dt.Columns
clm = column.ToString
clmAmt = clm & "_Amount"
Dim clmCount As Integer = dt.Columns.Count
If i = clmCount Then
qry += "Max(Case When fees_receiving_ledger.FeeName = '" & Replace(clm, "_", " ") & "' Then fees_receiving_ledger.FeeAmount Else 0 End) As '" & clmAmt & "'"
Else
qry += "Max(Case When fees_receiving_ledger.FeeName = '" & Replace(clm, "_", " ") & "' Then fees_receiving_ledger.FeeAmount Else 0 End) As '" & clmAmt & "',"
i += 1
End If
Next
qry += " FROM " & _
"fees_receiving_ledger " & _
"WHERE fees_receiving_ledger.DateTaken between '" & dtfrm & "' AND '" & dtto & "' " & _
"GROUP BY " & _
"fees_receiving_ledger.RcptNo " & _
"ORDER BY " & _
"fees_receiving_ledger.RcptNo"
dt.Columns.Add("TakenDate")
dt.Columns.Add("Rcpt")
在debug
模式下,在执行上述query
时,输出非常完美。
所以,我已经从MySQL
表添加了一些(动态)列到datatable
。
现在如何获取将值添加到数据表(dt
)的值?
我的表格结构如下......
CREATE TABLE `fees_receiving_ledger` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`RcptNo` varchar(20) DEFAULT NULL,
`FeeName` varchar(200) DEFAULT NULL,
`FeeAmount` double(10,2) DEFAULT NULL,
`DateTaken` date DEFAULT NULL,
PRIMARY KEY (`receive_id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1$$
注意:
我用" _"替换空白区域(下划线)因为我正在创建一个ADO.NET xml
文件来生成水晶报告。