Я подозреваю, что вы где-то пропустили .Text, но вы говорите, что сделали ToString для всех значений параметров, что кажется странным. В любом случае вы можете использовать следующий фрагмент кода для вывода имен параметров и имени типа значения, это может помочь определить проблемный параметр.
foreach (SqlParameter param in cmd.Parameters)
{
System.Diagnostics.Debug.WriteLine(string.Format("{0}:{1}", param.ParameterName, param.Value == null ? "NULL" : param.Value.GetType().Name));
}
Вы должны получить что-то вроде следующего в окне отладки, в этом случае CustomerSurname - это параметр, который имеет текстовое поле, а не строку в качестве примера.
@CustomerName:String
@CustomerSurname:TextBox
...