C# недопустимая ошибка приведения и, возможно, проблемы с таблицей.
Всем привет,
Я создаю нового клиента, и в моем запросе C# SQL я получаю ошибку “недопустимая ошибка операции приведения.” У меня есть пользователь, и я получаю информацию от этого пользователя и вставляю ее в клиента. Я получал ошибку внешнего ключа но я удалил внешний ключ чтобы вставить данные теперь я получаю недопустимые операции приведения,
private void BtnProfileEdit_Click(object sender, RoutedEventArgs e) { EnableControls(); if (boolBtnPush == true) { if (BtnProfileEdit.Content.Equals("Save")) { if (currentCustomer.IsCustomer == true) { if (TextboxFirstName.Text.Equals("")) { //Display messagebox so user MUST enter firstname. MessageBox.Show("You 'MUST' enter a First name,", "WARNING", MessageBoxButton.OK); } else { try { customerLoaded = new Customer(TextboxFirstName.Text, TextboxLastName.Text, TextboxAddress.Text, TextboxCity.Text, ComboboxState.SelectedValue.ToString(), TextboxZip.Text, TextEmailAddress.Text); UsersDB.UpdateCustomer(customerLoaded); Window SrcCustomerScreen = new CustomerScreen(currentCustomer); SrcCustomerScreen.Show(); Close(); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } } } else { MessageBox.Show("You must press 'Yes' selecting combobox customer", "Unacceptable", MessageBoxButton.OK); } } } //ON THE FIRST BUTTON CLICK DO THIS SO ON SECOND ABOVE CODE IS EXECUTED. boolBtnPush = true; BtnProfileEdit.Content = "Save"; } private void Btntest_Click(object sender, RoutedEventArgs e) { MessageBox.Show(currentCustomer.ToString()); } private void CboCustomer_SelectionChanged(object sender, SelectionChangedEventArgs e) { string cboValue = ""; if (CboCustomer.SelectedIndex > 0) cboValue = ((ComboBoxItem)CboCustomer.SelectedItem).Content.ToString(); if(cboValue.Equals("Yes")) { boolIsCustomer = true; User addCustomer = null; Customer newCustomer = null; MessageBoxResult result = MessageBox.Show("Updating database to customer status.", "Customer Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Exclamation); if (result == MessageBoxResult.Yes) { try { addCustomer = new User(currentCustomer.UserID, currentCustomer.Username, currentCustomer.Password, currentCustomer.IsAdmin, currentCustomer.UserCreatedDate, boolIsCustomer); UsersDB.UpdateCurrentUser(addCustomer); //Create New Customer newCustomer = new Customer(currentCustomer.UserID, currentCustomer.Username, null, null, null, null, null, null); UsersDB.CreateCustomer(newCustomer); //Load the newly created customer object so it can be read. customerLoaded = UsersDB.ReadCustomerById(currentCustomer.UserID); PopulateControls(customerLoaded); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } } } } public static int CreateCustomer(Customer customer) { string SQLcreateQuery = "INSERT INTO Customers (CustomerId, FirstName, LastName, Address, " + "City, State, ZipCode, EmailAddress) VALUES(@id, @fn, @ln, @ad, @ci, @st, @zc, @ea)"; SqlCommand cmdCreate = new SqlCommand(SQLcreateQuery, connection); cmdCreate.Parameters.AddWithValue("@id", customer.UserID); cmdCreate.Parameters.AddWithValue("@fn", customer.FirstName); cmdCreate.Parameters.AddWithValue("@ln", customer.LastName ?? Convert.DBNull); cmdCreate.Parameters.AddWithValue("@ad", customer.Address ?? Convert.DBNull); cmdCreate.Parameters.AddWithValue("@ci", customer.City ?? Convert.DBNull); cmdCreate.Parameters.AddWithValue("@st", customer.State ?? Convert.DBNull); cmdCreate.Parameters.AddWithValue("@zc", customer.ZipCode ?? Convert.DBNull); cmdCreate.Parameters.AddWithValue("@ea", customer.EmailAddress ?? Convert.DBNull); try { connection.Open(); cmdCreate.ExecuteNonQuery(); string SQLselect = "SELECT @@IDENTITY FROM Customers"; SqlCommand cmdSELECT = new SqlCommand(SQLselect, connection); int CustomerId = (int)cmdSELECT.ExecuteScalar(); return CustomerId; } catch (Exception ex) { throw ex; } finally { connection.Close(); } }
Что я уже пробовал:
удаление внешнего ключа
и многое другое тоже
CHill60
Вы получаете ошибку при выполнении запроса или раньше? Какова ваша схема таблицы и соответствует ли она тому, что вы пытаетесь вставить?
Кстати, слепое удаление внешних ключей не является хорошим способом отладки вашего кода - Вы просто хватаетесь за соломинку
ZurdoDev
Вы опубликовали весь код, который говорит мне, что вы не отладили это, чтобы выяснить, что происходит. Это ошибка SQL, а это значит, что вам нужно увидеть, какие значения вы передаете в SQL, и исправить их.
akshay_zz
Надеюсь, вы отладили свой код.Так что можете ли вы сказать нам, на какой линии вы получаете ошибку?
-cmdCreate.Метод executenonquery();
-int CustomerId = (int)cmdSELECT.Executescalar так();
или любой другой. Было бы здорово, если бы вы могли видеть, какие значения вы передаете, что делает эти значения совпадающими с типом данных столбца таблиц.