Istnieją trzy możliwe scenariusze takiej wstawki:
- Wstawienie się powiodło.
- Dostajesz wyjątek.
- Masz wyzwalacz, który zastępuje wstawkę inną akcją.
Sądzę, że nie masz wyzwalacza, a ponieważ nie otrzymujesz rekordu w tabeli, musi istnieć wyjątek.
Czy masz jakiś kod, który przechwytuje wyjątek na innym poziomie? To wyjaśniałoby, dlaczego go nie widzisz, a także pozostawiłoby niezamknięte połączenie z bazą danych, co wyjaśniałoby, dlaczego później masz problemy z połączeniem z bazą danych.
Korzystanie z using
blok dla połączenia z bazą danych zamknie go poprawnie, nawet jeśli w kodzie jest błąd.
Używasz zapytania parametrycznego, ale nie widzę, aby parametry zostały dodane do obiektu polecenia w dowolnym miejscu w kodzie. To byłoby coś w stylu:
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;