OLEDB SELECT TOP 1 / MAX()仅返回4位

时间:2015-10-14 20:38:39

标签: c# sql oledb

伙计我正在使用OLEDB使用以下Command对数据库进行查询:

OleDbCommand maxCommand = new OleDbCommand("SELECT TOP 1 id AS maxId FROM `tableName` ORDER BY id DESC", AppConstants.OLEDBCONNECTION);

然后打印结果:

maxCommand.CommandType = CommandType.Text;
OleDbDataReader reader = maxCommand.ExecuteReader();
reader.Read();
Int64 maxId = Int64.Parse(reader["maxId"].ToString()) + 1;

问题是我尝试使用MAX()TOP 1,但当我知道有超过10000 id个值时,它们都会返回9999。

请帮助,如果您需要任何其他信息,请发表评论。

1 个答案:

答案 0 :(得分:4)

id列的数据类型不是int。它可能是包含数字的varchar列。对它进行排序时,它按词汇顺序排序,而不是数字。

要获得您期望的结果,可以将其投射到int(它将无法使用索引搜索,因此效率不高)

select max(cast (id as int)) ...

如果可能,您应该将列类型更改为int