Jeśli przekażesz pustą wartość do parametru, otrzymasz ten błąd nawet po dodaniu parametrów, więc spróbuj sprawdzić wartość, a jeśli jest pusta, użyj DBNull.Value
To zadziała
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
Spowoduje to przekonwertowanie wartości null z warstwy obiektowej na wartości DBNull, które są akceptowane przez bazę danych.