我在网上找到了代码:schemaTable.Rows(i)!COLUMN_NAME.ToString
,但是这些列无序。有没有办法强制行完整性?
我的列数类似于A1
和A16
(不是字面意思,就像示例一样),列出后会按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
。我不确定如何解决这个问题,除了打破字符串本身并在字符串中寻找数字,但必须有一种方法来显示它们发生的实际顺序。
答案 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