TheBigBearNow Ответов: 1

Ссылка на объект C# WPF не установлена на экземпляр объекта


текущая ошибка: ссылка на объект не установлена на экземпляр объекта
Я получал недопустимую ошибку исключения cast, но я изменил (int) для преобразования.toInt32 и это ушло.

Я иду отлаживать его, и на моей кнопке щелкает, и код проходит весь путь, не останавливаясь ни на одной из моих точек останова. Ссылка на объект, которую я передаю, я получаю всю информацию без проблем, передаю пользователю и устанавливаю его в currentUser для чтения данных объекта. Запись вставляется в мою клиентскую базу данных, но вся информация, которую я передаю, там отсутствует, поэтому я знаю, что у меня есть какая-то проблема с тем, в чем я все еще не уверен.

В поле со списком выбор происходит, когда вы переходите к "да" и нажимаете кнопку Да с messagebox он вставляет нового клиента в таблицу.
На кнопке Изменить профиль / сохранить профиль нажмите кнопку я просто обновляю / добавляю новые данные.

//it would be in this section my error
private void BtnProfileEdit_Click(object sender, RoutedEventArgs e)
        {
            //User NewCustomer = null;
            //NewCustomer = UsersDB.GetUserById(currentCustomer.UserID);
            //Customer NewCustomer = null;
            //NewCustomer =(Customer) UsersDB.GetUserById(currentCustomer.UserID);
            //NewCustomer = (Customer)currentCustomer;
            //(User) NewCustomer = currentCustomer;
            //currentCustomer = (User)NewCustomer;
            //currentCustomer = NewCustomer;
            //Change button content to 'Save'.
            
            EnableControls();
            //MessageBox.Show(currentCustomer.GetType() + " VS " + NewCustomer.GetType());

            if (boolBtnPush == true)
            {
                if (BtnProfileEdit.Content.Equals("Save"))
                //if(BtnProfileEdit.Content.ToString() == "Save")
                //error label.
                {
                    if(boolIsCustomer == true)
                    //if (currentUser.IsCustomer == true)
                    //if (NewCustomer.FirstName.Equals(""))
                    {
                        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
                                testcus = new Customer(currentUser.UserID, TextboxFirstName.Text,
                                    TextboxLastName.Text, TextboxAddress.Text, TextboxCity.Text,
                                    ComboboxState.SelectedValue.ToString(), TextboxZip.Text, TextEmailAddress.Text);
                                UsersDB.UpdateCustomer(testcus);

                                //Window SrcCustomerScreen = new CustomerScreen(currentUser);
                                ////or use newcustomer to insert values.
                                //SrcCustomerScreen.Show();
                                //Close();
                            }
                            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
                        }
                    }
                    else
                    {
                        MessageBox.Show("You must select 'Yes' in combobox Customer\n" +
                            "to add customer data.", "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(currentUser.ToString());
        }

        private void CboCustomer_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            string cboValue = "";
            if (CboCustomer.SelectedIndex > 0)
                cboValue = ((ComboBoxItem)CboCustomer.SelectedItem).Content.ToString();
                //(ComboBoxItem)CboCustomer.SelectedItem)
            if(cboValue.Equals("Yes"))
            //if (CboCustomer.SelectedItem..ToString().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(currentUser.UserID, currentUser.Username,
                            currentUser.Password, currentUser.IsAdmin, currentUser.UserCreatedDate, boolIsCustomer);
                        UsersDB.UpdateCurrentUser(addCustomer);
                        //Create New Customer
                        newCustomer = new Customer(currentUser.UserID, currentUser.Username, null, null,
                                                    null, null, null, null);
                        UsersDB.CreateCustomer(newCustomer);

                        //Load the newly created customer object so it can be read.
                        //customerLoaded = UsersDB.ReadCustomerById(currentUser.UserID);
                        //PopulateControls(customerLoaded);
                    }
                    catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
                }
                //else
                   // boolIsCustomer = false;
            }        }
    }
//AND HERE IS WHERE MY METHODS CREATE CUSTOMER AND UPDATE CUSTOMER THAT I USE.
public static int CreateCustomer(Customer customer)
        {
            string SQLcreateQuery = "INSERT INTO Customers (UserId, 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 ?? Convert.DBNull);
            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 = Convert.ToInt32(cmdSELECT.ExecuteScalar());
                return CustomerId;
            }
            catch (Exception ex) { throw ex; }
            finally { connection.Close(); }
        }
        //READ
        public static Customer ReadCustomerById(int id)
        {
            string SQLreadQuery = "SELECT * FROM Customers WHERE UserId=@uid";
            SqlCommand cmdRead = new SqlCommand(SQLreadQuery, connection);
            cmdRead.Parameters.AddWithValue("@uid", id);
            try
            {
                connection.Open();
                SqlDataReader reader = cmdRead.ExecuteReader(CommandBehavior.SingleRow);
                if (reader.Read())
                {
                    Customer customer = new Customer()
                    {
                        UserId = Convert.ToInt32(reader["UserId"]),
                        /*Username = reader["Username"].ToString(),
                        Password = reader["Password"].ToString(),
                        IsAdmin = Convert.ToBoolean(reader["IsAdmin"]),
                        UserCreatedDate = Convert.ToDateTime(reader["UserCreatedDate"]),*/
                        FirstName = reader["FirstName"].ToString(),
                        LastName = reader["LastName"].ToString(),
                        Address = reader["Address"].ToString(),
                        City = reader["City"].ToString(),
                        State = reader["State"].ToString(),
                        ZipCode = reader["ZipCode"].ToString(),
                        EmailAddress = reader["EmailAddress"].ToString()
                    };
                    return customer;
                }
                else
                    return null;
            }
            catch(Exception ex) { throw ex; }
            finally { connection.Close(); }
        }
        //UPDATE
        public static bool UpdateCustomer(Customer customer)
        {
            bool result = false;
            string SQLupdateQuery = "UPDATE Customers SET FirstName=@fn, LastName=@ln, " +
                "Address=@ad, City=@ci, State=@st, ZipCode=@zc, EmailAddress=@ea " +
                "WHERE UserId=@cid";
            SqlCommand cmdUpdate = new SqlCommand(SQLupdateQuery, connection);
            cmdUpdate.Parameters.AddWithValue("@cid", customer.UserId);
            cmdUpdate.Parameters.AddWithValue("@fn", customer.FirstName);
            cmdUpdate.Parameters.AddWithValue("@ln", customer.LastName);
            cmdUpdate.Parameters.AddWithValue("@ad", customer.Address);
            cmdUpdate.Parameters.AddWithValue("@ci", customer.City);
            cmdUpdate.Parameters.AddWithValue("@st", customer.State);
            cmdUpdate.Parameters.AddWithValue("@zc", customer.ZipCode);
            cmdUpdate.Parameters.AddWithValue("@ea", customer.EmailAddress);
            try
            {
                connection.Open();
                cmdUpdate.ExecuteNonQuery();
                result = true;
            }
            catch(Exception ex)
            {
                ex.Message.ToString();
                throw ex;
            }            
            finally { connection.Close(); }
            return result;
        }


Что я уже пробовал:

отладка но щелчок кнопки проходит до конца и никакие точки останова не попадают

1 Ответов

Рейтинг:
2

OriginalGriff

Отладчик-это практически единственный способ найти это: если вы не попадаете в точки останова, то либо они не находятся в нужном месте, либо вы не отлаживаете код, который выполняете.

Итак: попробуйте еще раз. Перейдите в меню "отладка" и выберите пункт меню "исключения...".
В появившемся диалоговом окне убедитесь, что во всех полях есть галочки: "брошенный" и "пользователь-необработанный", затем нажмите кнопку ОК.

Запустите свое приложение в отладчике, и когда возникнет исключение, оно сломается - даже если оно находится внутри отладчика. try ... catch блок.
А теперь посмотри и пойми почему.

Извините, но мы не можем сделать этого для вас!