2015-10-14 66 views
0

家伙,我正在做一个查询到DB使用OLEDB有以下CommandOLEDB SELECT TOP 1/MAX()返回只有4位

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但他们都返回9999,当我知道有超过10000 id值。

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

+0

当您直接在数据库上运行查询时,会得到什么结果? – Siyual

+0

由于以下几个原因,我不能直接在数据库上运行查询对不起@Siyual但是当我使用'id'与'id = 10001'进行搜索时,我得到一个记录 –

+1

那么你怎么知道有更大的ID然后10000? –

回答

4

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

要得到你希望你可以将它转换为int(这将不能够使用索引查找,所以它不会是非常有效的)结果

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

如果有可能,你应该改变列类型为int

+0

是的你是对的,数据类型是'OleDbType.Char',但我怎么能仍然得到最高的价值?即最高的数字? –

+0

@VítorMartins你可以将它转换为int:'select max(cast(id as int))...',虽然效率不高。如果可能,请将列类型更改为int。 –