Passing Numeric , you assured Npgsql that you were passing the number. Then you passed the string.
If you are already sure, due to other code, that there is a decimal value in txt_price and there could be nothing else, use:
autoInsert.Parameters[0].Value = decimal.Parse(txt_price.Text);
Otherwise, combine it with the code to verify this before doing anything else:
decimal price; if(!decimal.TryParse(txt_price.Text, out price)) {
source share