求助: 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都没出现过这样的问题 --------------------编程问答--------------------
那是因为你只用一种查询引擎去查询。如果不同的查询引擎,它们的排列没有办法保证一致。除非你写上“order by”。 --------------------编程问答-------------------- 你可以增加一列,叫最后修改时间。在插入更新的时候更新这个字段。
在查询的时候按照它排序。
你这个典型是完全没有概念,把数据库当excel使了。
补充:.NET技术 , C#