当前位置:编程学习 > C#/ASP.NET >>

求助: C# 使用OleDB读取数据库,读回的顺序与数据库不一致

求助各位大神:
现采用C# 通过SQL命令(SELECT * from 表名),读取Access数据库所有行,但读回的行数顺序与数据库不一致。
在while (dbReader.Read())中的数据顺序并非是数据库执行SQL命令的数据顺序,导致添加后的序列顺序不样

请教各位大神此问题到底出现在哪,万分感谢。代码如下:
            ArrayList AllRowData = new ArrayList();

            Cols = 0;
            dbCmd = dbCon.CreateCommand();

            dbCmd.CommandType = System.Data.CommandType.Text;
            dbCmd.CommandText = SQLCmdList[(int)SQLCmd.所有项].Replace("TB_NAME", tbName);    //如果命令中增加排序ORDER BY就可以解决此问题

            dbReader = dbCmd.ExecuteReader();
            Cols = dbReader.FieldCount;
            while (dbReader.Read())
            {
                RowData = new string[Cols];  //必须每读一次重新实例化,否则所有值行值都为最后一行的值        注:这里的顺序与错误的顺序一致
                for (int i = 0; i < dbReader.FieldCount; i++)
                {
                    RowData[i] = dbReader[i].ToString();
                }
                AllRowData.Add(RowData);
            }
程序输出结果


数据库运行命令结果
--------------------编程问答-------------------- 你用SELECT * from 表名时做个排序,项目编号由小到大
SELECT * from 表名 order by 项目编号 ASC --------------------编程问答-------------------- 如果你不写“order by”,没有任何办法给你保证“取得的顺序一致”。
--------------------编程问答--------------------  dbCmd.CommandText = "SELECT * from 表名 order by 项目编号 ASC" --------------------编程问答-------------------- 嗯,原来写有排序的是可以的。只是后续可能会要选择不同的表,所选的排序列不一样,所以把排序的命令去掉了,就出现了这个问题。。
我一直在想是不是 dbReader = dbCmd.ExecuteReader(); 这里还可以有什么参数,或者在
while (dbReader.Read()) 可以把顺序调整过来呢? --------------------编程问答-------------------- 如果采用这种方式读取SQL Sever的数据库会出现这个问题吗 ? 以前用其他软件操作SQL都没出现过这样的问题 --------------------编程问答--------------------
引用 5 楼 lz80650904 的回复:
如果采用这种方式读取SQL Sever的数据库会出现这个问题吗 ? 以前用其他软件操作SQL都没出现过这样的问题


那是因为你只用一种查询引擎去查询。如果不同的查询引擎,它们的排列没有办法保证一致。除非你写上“order by”。 --------------------编程问答-------------------- 你可以增加一列,叫最后修改时间。在插入更新的时候更新这个字段。

在查询的时候按照它排序。

你这个典型是完全没有概念,把数据库当excel使了。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,