I am trying to update a DetailsView but I am getting the error "Parameters must be named". I assume that means there is a problem with the markup for the DetailsView. Here is the relevant code:
<asp:DetailsView ID="DetailsView1"
          runat="server"
          AutoGenerateRows="False" 
          DataKeyNames="studentID"
          DataSourceID="SqlDataSource1" 
          ForeColor="Blue"
          BackColor="#FFF7E6"            
          AutoPostBack="False"                        
          AutoGenerateEditButton = True
          AutoGenerateInsertButton = True
          OnModeChanging="StudentDetailView_ModeChanging"                         
          Height=163px
          Width=327px              
          style="left: 400px; top: 1px; position: absolute;">  
            <Fields>      
            <asp:TemplateField 
              HeaderText="Username">            
            <EditItemTemplate>
            <asp:TextBox 
              id="txtUserName"
              Text = '<%# Bind ("username") %>'
              runat = "server" />
            <asp:RequiredFieldValidator
              ID = "reqUserName"
              ControlToValidate = "txtUserName"
              Text = "(required)"
              Display = "Dynamic"
              runat = "server" />            
            </EditItemTemplate>
            <ItemTemplate>
              <asp:Label 
                id="UsernameLabel"
                runat="server"
                Text = '<%# Eval("username") %>' />
            </ItemTemplate>
            </asp:TemplateField>
          <asp:TemplateField 
            HeaderText="Date of birth">           
            <EditItemTemplate>
              <asp:TextBox 
                id="txtDOB"
                Text = '<%# Bind("dateofbirth") %>'
                runat = "server" />
              <asp:RangeValidator 
                runat="server" id="rngDOB" 
                controltovalidate="txtDOB" 
                type="Date" 
                minimumvalue="01-01-1930" 
                maximumvalue="01-01-2007" 
                errormessage="Please enter a valid date."
                HtmlEncode="false" />                        
            </EditItemTemplate>            
            <ItemTemplate>
              <asp:Label 
                id="DOBLabel"
                runat="server"                
                DataFormatString="{0:dd/MM/yyyy}"
                HtmlEncode="false"
                />
            </ItemTemplate>              
          </asp:TemplateField>           
               <asp:BoundField
               datafield="classday1"
               headertext="Class day 1"
               SortExpression="classday1"
               />
               <asp:BoundField ApplyFormatInEditMode="True" DataFormatString="<%=date()%>" />
            </Fields>
        </asp:DetailsView>
        <asp:SqlDataSource 
          ID="SqlDataSource1"
          runat="server" 
          ConnectionString="<%$ ConnectionStrings:FCLManager %>" ProviderName="MySql.Data.MySqlClient"
          SelectCommand="SELECT * from studentinfo WHERE centreID = @CentreID and fullname = @FullName"            
          UpdateCommand="UPDATE studentinfo SET username = @username, dateofbirth = @dateofbirth, classday1 = @classday1 WHERE studentID = @StudentID">
<UpdateParameters>   
            <asp:Parameter Name="username" Type="String" />
            <asp:Parameter Name="dateofbirth" Type="DateTime" />  <%--you can't use 'Date' on its own--%>
            <asp:Parameter Name="classday1" Type="String" />            
            </UpdateParameters>
        </asp:SqlDataSource>
This is a shortened version of my code but I think it shows the essentials.
Can anyone see what's wrong with this code?