Se você passar o valor nulo para o parâmetro, você receberá esse erro mesmo depois de adicionar os parâmetros; tente verificar o valor e, se for nulo, use DBNull.Value
Isso vai funcionar
cmd.Parameters.Add("@Department", SqlDbType.VarChar)
If (TextBox2.Text = Nothing) Then
cmd.Parameters("@Department").Value = DBNull.Value
Else
cmd.Parameters("@Department").Value = TextBox2.Text
End If
Isso converterá os valores nulos da camada de objeto em valores DBNull que são aceitáveis para o banco de dados.