VB.NET将CellSet转为DataTable

这个VB.NET函数AdoMdCellSetToDataTable接收一个CellSet对象,并将其转换为DataTable。它首先创建新的DataTable,然后遍历CellSet的轴来生成列和行数据。在每一行中,函数填充成员的Caption,并将CellSet的值添加到对应的数据行中。最后返回转换后的DataTable。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1.     ''' <summary>
  2.     ''' 将CellSet转为DataTable.
  3.     ''' </summary>
  4.     ''' <param name="CellSet">CellSet对象.</param>
  5.     ''' <returns>DataTable</returns>
  6.     ''' <remarks></remarks>
  7.     Private Function AdoMdCellSetToDataTable(ByVal CellSet As Microsoft.AnalysisServices.AdomdClient.CellSet) As DataTable
  8.         Dim Dt As New DataTable
  9.         Dim Dc As New DataColumn
  10.         Dim Dr As DataRow = Nothing
  11.         Dim I As Int32
  12.         Dim ColName As String = ""
  13.         Dim sC As Int32
  14.         Dim sR As Int32 = 0
  15.         Dim RowID As Int32 = 0
  16.         Dim SDr As DataRow = Nothing
  17.         sC = 1
  18.         For Each M As Microsoft.AnalysisServices.AdomdClient.Member In CellSet.Axes(1).Positions(0).Members
  19.             sC += 1
  20.             Dc = New DataColumn()
  21.             Dc.ColumnName = Microsoft.VisualBasic.Space(sC) '//以空填充空白部分.
  22.             Dt.Columns.Add(Dc)
  23.         Next
  24.         '//生成数据列对象
  25.         sR = 0
  26.         Dim R, C As Int32
  27.         Dim ColID As Int16 = 0
  28.         Dim AxexCount_0 As Int32 = CellSet.Axes(0).Positions.Count
  29.         Dim AxexCount_1 As Int32 = CellSet.Axes(1).Positions.Count
  30.         Dim CName As String
  31.         R = 0 : C = 0
  32.         For Each P As Microsoft.AnalysisServices.AdomdClient.Position In CellSet.Axes(0).Positions '//分解0轴,Mdx中的 ON Columns 轴.
  33.             CName = ""
  34.             R = 0 : ColID += 1
  35.             For Each M As Microsoft.AnalysisServices.AdomdClient.Member In P.Members
  36.                 If R = 0 Then
  37.                     CName = CName & "[" & Trim$(M.Caption) & "]"
  38.                 Else
  39.                     CName = CName & ".[" & Trim$(M.Caption) & "]"
  40.                 End If
  41.                 R += 1
  42.             Next
  43.             Dc = New DataColumn()
  44.             Dc.ColumnName = CName
  45.             Dt.Columns.Add(Dc)
  46.             C += 1
  47.         Next
  48.         '//添加行数据
  49.         Dim CellVal As String
  50.         Dim Pos As Int32 = 0
  51.         Dim Ts As String
  52.         Dim Cid As Int32
  53.         For Each py As Microsoft.AnalysisServices.AdomdClient.Position In CellSet.Axes(1).Positions  '//分解1轴,Mdx中的 ON Rows 轴
  54.             Dr = Dt.NewRow()
  55.             RowID += 1
  56.             I = 0
  57.             '//行方向的名称列.
  58.             For Each m As Microsoft.AnalysisServices.AdomdClient.Member In py.Members
  59.                 Ts = m.Caption
  60.                 Cid = I
  61.                 Dr(Cid) = Ts
  62.                 I += 1
  63.             Next
  64.             '//行数据
  65.             For X As Int32 = 1 To AxexCount_0
  66.                 CellVal = "" & CellSet(Pos).FormattedValue
  67.                 If CellVal = "1.#INF" OrElse CellVal = "-1.#IND" OrElse CellVal = "1#I.NF0" OrElse CellVal = "1#I.NF0%" Then CellVal = "" 
  68.                 Dr(Cid+X) = CellVal
  69.                 Pos += 1
  70.             Next
  71.             Dt.Rows.Add(Dr)
  72.         Next
  73.         Return Dt
  74.     End Function
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值