You should pack your sprites into sprite sheets, this should allow you to fit most sprites into a single texture. It also means you only need to bind a single texture, generate a single vertex buffer, use a default index buffer to draw your sprites. There are a few utilities for generating sprite sheets around, e.g.
http://spritesheetpacker.codeplex.com/
So your code would look something like:
index_buffer indices;
indices = generate_index_buffer(); // makes a single index buffer you can use for drawing all your sprites, looks like: [0,1,2,3,4,5,6,7,8,9,...,n] where n is a big number (as many as you are going to have active sprites * 4, preferably).
vertex_buffer verts;
while(playing_this_awesome_game)
{
verts.clear();
foreach(Sprite sprite in activeSprites)
{
verts.add(Vertex(sprite.x, sprite.y, sprite.u, sprite.v));
verts.add(Vertex(sprite.x + sprite.w, sprite.y, sprite.u2, sprite.v));
verts.add(Vertex(sprite.x + sprite.w, sprite.y + sprite.h, sprite.u2, sprite.v2));
verts.add(Vertex(sprite.x, sprite.y + sprite.h, sprite.u, sprite.v2));
}
load_vertex_buffer(verts);
draw_index_array(indices, 0, activeSprites.count() * 4);
}
Obviously this is over-simplified, you need to do things like setting up your vertex format, stride etc, as well, or maybe load your sprite positions and sprite uvs into different buffers.
Also you might want to update active sprites directly into the vertex array instead and use a dynamic index buffer to only render the ones you are using.
I'm really no expert on sprite rendering though so you are best to look into this yourself more.