Вы можете написать свой тест следующим образом
decimal.TryParse(TB_P.Text, out decimal result);
cmd.Parameters.Add("@P", SqlDbType.Decimal).Value = (result == 0 ? (object)DBNull.Value : result);
, но если 0 является допустимым значением для записи, вам нужно быть более подробным
object value;
if (!decimal.TryParse(TB_P.Text, out decimal result))
value = DBNull.Value;
else
value = result;
cmd.Parameters.Add("@P", SqlDbType.Decimal).Value = value;
Также обратите внимание, что TextBoxСвойство .Text никогда не бывает пустым.Это может быть пустая строка, но не нулевое значение, которое легко показать с помощью
TB_P.Text = null;
Console.WriteLine(TB_P.Text == null ? "Is null" : "Is not null");