title: Why can’t I use a SqlConnection instance until the SqlDataReader is closed?
body: <p>From MSDN:</p>
  
  <blockquote>
    <p>While the SqlDataReader is being used, the associated SqlConnection is busy serving the SqlDataReader, and no other operations can be performed on the SqlConnection other than closing it. This is the case until the Close method of the SqlDataReader is called. For example, you cannot retrieve output parameters until after you call Close.</p>
  </blockquote>
  
  <p>a) Why couldn’t you use SqlConnection for anything else? After all, when <code>ExecuteQuery()</code> returns SqlDataReader object, the data from DB has already been retrieved and populated SqlDatareader object. Thus I don’t see how or why SqlConnection should still be serving SqlDataReader object?! </p>
  
  <p>b) More importantly, for what reason would it be bad idea to retrieve output parameters before you call <code>Close()</code> on SqlDataReader?</p>
  
  <p>c) When above quote mentions that no other operations can be performed on SqlConnection, what operations does it have in mind? Just those that would require to connect to remote sql server, or we can’t use any members of SqlConnection instance? </p>