Also, now that I had investigated the code more in depth...
The idea of "prepared statements cache" is not quite necessary.
The SqlConnection interface should keep just one prepared statement. It can easily detect which one and how long to keep it (parse flag indicates that statement should be parsed...).
Now if user wants to keep prepared statement, the simplest way is to make its variable 'static', leaving the control to the client.