Splitting a list of numbers into multiple lists
Pretty minor but you don't need the  if (row_id == 0)

if (row_id++ &gt; list_size) // Add the sublist to the result
{
    result.Add(route_list); 
    row_id = 0;
    route_list = new List&lt;long&gt;();
}


Also it seem like you should also test for 

if (route_list.Count &gt; 0 ) 


Why not just put where route_source_id is not null in the query?

Connection, Command, and Reader behave the same with many DB so this is pretty portable.

I think you can use 

conn.CreateCommand()


Long is not required for row_id or list_size

Why bump row_id++ if there is no value?

In summary  

    using (var reader = cmd.ExecuteReader())
    {
        const int list_size = 100;                
        List&lt;long&gt; route_list = new List&lt;long&gt;(list_size);

        while (reader.Read())
        {                                
           if (route_list.Count &gt;= list_size) // Add the sublist to the result
           {
               result.Add(route_list); 
               route_list = new List&lt;long&gt;(list_size);
           }
           route_list.Add(reader.GetInt64(0));
        }

        if (route_list.Count &gt; 0 ) // add the last sublist
        {
           result.Add(route_list);
        }
    }