我有一个 Access 表,其中有一个数字字段和一个文本字段。
我可以运行这样的查询:
SELECT * FROM Table ORDER BY intID ASC
//outputs 1,2,3,10
但是当我尝试通过 .NET OleDB 客户端运行相同的查询时,如下所示:
Private Sub GetData()
Using cnDB As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Path)
cnDB.Open()
Dim SQL As String = "SELECT * FROM Table ORDER BY intID ASC"
Dim cmd As New OleDbCommand(SQL, cnDB)
Dim dr As OleDbDataReader = cmd.ExecuteReader()
While dr.Read()
lst.Items.Add(dr.Item("intID") & " - " & dr.Item("strName"))
End While
cnDB.Close()
End Using
End Sub
我得到的元素顺序为 1,10,2,3。
这里发生了什么,如何让数据在两个地方“自然地”排序(1,2,3,10)?
最佳答案
尝试
SELECT * FROM Table ORDER BY CInt(intID) ASC
显式告诉 Access 将其视为整数而不是字符串。显然,OleDbClient 中的某些内容将此字段视为字符串(文本字段)并相应地进行排序。
关于vb.net - 在 Access 和 .NET 中对数字进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7233378/