schemaTable.Rows(i).ToString订单问题

时间:2014-04-29 16:54:35

标签: vb.net ms-access

我在网上找到了代码:schemaTable.Rows(i)!COLUMN_NAME.ToString,但是这些列无序。有没有办法强制行完整性? 我的列数类似于A1A16(不是字面意思,就像示例一样),列出后会按A1 A10 A11 ... A16 A2的顺序显示。

更新: 蒂姆,这应该解释你要求的东西,我希望。

Using db As New OleDb.OleDbConnect(constr)
      db.Open()
      Dim cmd As New OleDbCommand(STATEMENT, db)
      Dim schemaTable As DataTable = db.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, New Object() {Nothing, Nothing, table_name, Nothing})
      Try
         For i = 0 To SchemaTable.Rows.Count - 1
                 MsgBox(schemaTable.Rows(i)!COLUMN_NAME.ToString)
         next i
     catch e as exception
     end try
end using

整个列表在MsgBox(或任何其他显示方法)中按顺序返回。如果字符串是字母数字而不是最后的数字,那么列将按字符串显示的顺序显示(即A16出现在A2之前),但实际顺序为A2 A3 A4 ... A16。我不确定如何解决这个问题,除了打破字符串本身并在字符串中寻找数字,但必须有一种方法来显示它们发生的实际顺序。

1 个答案:

答案 0 :(得分:1)

是的,似乎GetOleDbSchemaTable方法(如Microsoft支持文档here中“列出表中的列的创建示例”一节中所述)按字母顺序列出了列。< / p>

您可能会对使用SELECT *打开空OleDbDataReader然后遍历其字段的结果感到满意:

Imports System.Data.OleDb

Module Module1

    Sub Main()
        Using con As New OleDbConnection
            con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Public\Database1.accdb;"
            con.Open()
            Using cmd As New OleDbCommand
                cmd.Connection = con
                cmd.CommandText = "SELECT * FROM aTestTable WHERE False"
                Dim rdr As OleDbDataReader = cmd.ExecuteReader()
                For i = 0 To rdr.FieldCount - 1
                    Console.WriteLine(rdr.GetName(i))
                Next
            End Using
        End Using
    End Sub

End Module