Well the layer would decide what you are trying todo obviously with the methods being passed in or with certain properties
e.g.
ReturnSql(object o, list<params> i)
the object would contain something like User.Branches,
thus the layer could extrapolate that you are intending to query the User_Branches table
the params list would just be a generic collection with accompanying fields.e.g
(int)Userid=>1
(string)branchName=>JHB
so when you explode the collection the query would be output someting like select * from user_branches where userid=1 and branchName='JHB'. Obviously this a very primitive example, but i think you kind of get my point. I have written libraries that do what i am explaining. And i have done benchmarks with similar stored procedures , and the dynamic was at least 0.3 seconds faster, so if you have about 3,000 requests a second you can see that builds into like 30seconds of delay time that the server processes. But when i wrote it i was looking at about 14,000 requests a second. As that is what our website is looking at handling, most likely more.
Also i might point out here, that the microsoft ajax controls are horribly slow. Personally i dont think that asp.net is the best of enviroments to make websites, yes its quick, its easy, and there are some sites that do it, but its just slow. take
www.asp.net and
www.codeplex.com, those sites are just horrid. They take forever to load. My internet is quick. Other sites written in faster processing languages such as ruby and php are faster. freshmeat, sourceforge(which has vasts more traffic) loads much much faster than those.