Ci sono tre possibili scenari per un inserto del genere:
- L'inserimento riesce.
- Ottieni un'eccezione.
- Hai un trigger che sostituisce l'inserto con qualche altra azione.
Immagino che tu non abbia un trigger e, poiché non ottieni un record nella tabella, deve esserci un'eccezione.
Hai del codice che cattura l'eccezione a qualsiasi altro livello? Ciò spiegherebbe perché non lo vedi e lascerebbe anche la connessione al database non chiusa, il che spiegherebbe perché in seguito hai problemi di connessione al database.
Usando un using
blocco per la connessione al database lo chiuderebbe correttamente anche se c'è un errore nel codice.
Stai usando una query parametrizzata, ma non riesco a vedere che aggiungi i parametri all'oggetto comando in qualsiasi punto del codice. Sarebbe qualcosa del tipo:
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;