Há três cenários possíveis para uma inserção como essa:
- A inserção foi bem-sucedida.
- Você recebe uma exceção.
- Você tem um gatilho que substitui a inserção por alguma outra ação.
Eu acho que você não tem um gatilho, e como você não pega um registro na tabela, tem que haver uma exceção.
Você tem algum código que captura a exceção em qualquer outro nível? Isso explicaria por que você não o vê e também deixaria a conexão do banco de dados aberta, o que explicaria por que você tem problemas para se conectar ao banco de dados posteriormente.
Usando um
using
bloco para a conexão de banco de dados fecharia corretamente mesmo se houvesse um erro no código. Você está usando uma consulta parametrizada, mas não consigo ver que você adiciona os parâmetros ao objeto de comando em qualquer lugar do código. Isso seria algo como:
cmd.Parameters.Add("Price", SqlDbType.Decimal).Value = price;
cmd.Parameters.Add("User", SqlDbType.NChar, 20).Value = user;
cmd.Parameters.Add("Time", SqlDbType.NChar, 15).Value = time;
cmd.Parameters.Add("Customer", SqlDbType.NChar, 10).Value = customer;
cmd.Parameters.Add("Discount", SqlDbType.Decimal).Value = discount;
cmd.Parameters.Add("FullPrice", SqlDbType.Decimal).Value = fullPrice;