internal ReadOnlyCollection<ReadOnlyCollection<SqlParameterInfo>> ParameterizeBlock(SqlBlock block) {
     SqlParameterInfo rowStatus =
         new SqlParameterInfo(
             new SqlParameter(typeof(int), typeProvider.From(typeof(int)), "@ROWCOUNT", block.SourceExpression)
             );
     List<ReadOnlyCollection<SqlParameterInfo>> list = new List<ReadOnlyCollection<SqlParameterInfo>>();
     for (int i = 0, n = block.Statements.Count; i < n; i++) {
         SqlNode statement = block.Statements[i];
         List<SqlParameterInfo> parameters = this.ParameterizeInternal(statement);
         if (i > 0) {
             parameters.Add(rowStatus);
         }
         list.Add(parameters.AsReadOnly());
     }
     return list.AsReadOnly();
 }
 private SqlParameter InsertLookup(SqlValue cp) {
     SqlParameterInfo pi = null;
     if (!this.map.TryGetValue(cp, out pi)) {
         SqlParameter p;
         if (this.timeProviderType == null) {
             p = new SqlParameter(cp.ClrType, cp.SqlType, this.parameterizer.CreateParameterName(), cp.SourceExpression);
             pi = new SqlParameterInfo(p, cp.Value);
         }
         else {
             p = new SqlParameter(cp.ClrType, this.timeProviderType, this.parameterizer.CreateParameterName(), cp.SourceExpression);
             pi = new SqlParameterInfo(p, ((DateTime)cp.Value).TimeOfDay);
         }
         this.map.Add(cp, pi);
         this.currentParams.Add(pi);
     }
     return pi.Parameter;
 }