ссылка на объект не определяется экземпляром c# - PullRequest
0 голосов
/ 28 мая 2020

Привет, ребята, я создаю настольное приложение для проверки студентов, после того как я связал свою базу данных (postgres) с проектом и показывал свою таблицу, когда я пытаюсь что-то удалить, она показывает мне эту ошибку и ID_student и DELETE / UPDATE кнопки изменения позиций с первыми столбцами enter image description here это нормальный

затем после того, как я нажму кнопку удаления enter image description here, но в моей базе данных пользователь был удален, и та же ошибка появляется на моей надписи, студенты добавлены, но я получил эту ошибку, я ищу много решений, проверял свои переменные и почти потерял надежду, это моя таблица

 private new void Select()
        {
            try
            {
                conn.Open();
                sql= @"select  etudiant.id_etudiant,etudiant.nom,etudiant.prenom,etudiant.age,etudiant.sexe,etudiant.num,class.nom_class
                        from etudiant
                        inner join class on etudiant.classess=class.id_class";
                cmd = new NpgsqlCommand(sql, conn);
                dt = new DataTable();
                dt.Load(cmd.ExecuteReader());



                conn.Close();
                bunifuCustomDataGrid1.DataSource = null;//resete
                bunifuCustomDataGrid1.DataSource = dt;
            }
            catch ( Exception ex)
            {
                conn.Close();
                MessageBox.Show("ERROR" + ex.Message);
            }
        }

, и это мое удаление

        {
            if (bunifuCustomDataGrid1.Columns[e.ColumnIndex].Name == "Delete")
            {


                try
                {
                    conn.Open();
                    sql = @"Select   all from deleteEtudiant(:id_)  ";
                    cmd = new NpgsqlCommand(sql, conn);
                    cmd.Parameters.AddWithValue("id_", int.Parse(bunifuCustomDataGrid1.Rows[e.RowIndex].Cells["ID"].Value.ToString()));
                    if ((int)cmd.ExecuteScalar() == 1)
                    {
                        MessageBox.Show("Deleted");



                    }



                    conn.Close();

                }
                catch (Exception ex)
                {
                    conn.Close();
                    MessageBox.Show("User deleted don't forget the bug yassine" + ex.Message);

                }
            }
            if (bunifuCustomDataGrid1.Columns[e.ColumnIndex].Name == "Update")
            {

                try
                {
                    conn.Open();
                    sql = @"Select * from updateETUDIANT(':id_,:ST_Firstname ,:ST_prenom ,:ST_Age,:ST_Sexe,:ST_num');
";
                    cmd = new NpgsqlCommand(sql, conn);
                    cmd.Parameters.AddWithValue("id_", int.Parse(bunifuCustomDataGrid1.Rows[e.RowIndex].Cells["ID_etudiant"].Value.ToString()));
                    cmd.Parameters.AddWithValue("ST_Firstname", (bunifuCustomDataGrid1.Rows[e.RowIndex].Cells["Nom"].Value.ToString()));

                    if ((int)cmd.ExecuteScalar() == 1)
                    {
                        MessageBox.Show("UPDATED");

                        Select();


                    }



                    conn.Close();

                }
                catch (Exception ex)

                {
                    conn.Close();
                    MessageBox.Show("User UPDATED"+ex.Message);
                    Select();

                }


            }

Прошу прощения за длинный пост, и я надеюсь, что вы можете сказать мне, как улучшить

изменить: у меня небольшой вопрос, мой запрос здесь неверен?

 public void Ajouter_Click(object sender, EventArgs e)
        {
            try
            {
                conn.Open();
                sql = "insert into etudiant (Nom, prenom, sexe) " +
                     "values(@Nom, @prenom,  @sexe);";
                cmd = new NpgsqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("nom", bunifuMaterialTextbox1.Text);
                cmd.Parameters.AddWithValue("prenom", bunifuMaterialTextbox2.Text);
                //cmd.Parameters.AddWithValue("Age", bunifuMaterialTextbox2.ToString());//
                cmd.Parameters.AddWithValue("sexe", bunifuMaterialTextbox3.Text);
                //cmd.Parameters.AddWithValue("Num", bunifuMaterialTextbox6.Text);
                //cmd.Parameters.AddWithValue("Classess", bunifuMaterialTextbox7.Text);
                 int result = (int)cmd.ExecuteScalar();






                if (result==1)
                {
                    conn.Close();

                    MessageBox.Show("Etudinat ajouter");

                }


            }
            catch (Exception ex)
            {
                MessageBox.Show("ERROR" + ex.Message);
                conn.Close();

            }


        }




он дает мне ту же ссылку на объект ошибки, что и при удалении

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Я отвечу, что ваш Select неправильный? :)

try
                {
                    conn.Open();
                    sql = @"Select   all from deleteEtudiant(:id_)  ";
                    cmd = new NpgsqlCommand(sql, conn);
                    cmd.Parameters.AddWithValue("id_", int.Parse(bunifuCustomDataGrid1.Rows[e.RowIndex].Cells["ID"].Value.ToString()));
                    if ((int)cmd.ExecuteScalar() == 1)
                    {
                        MessageBox.Show("Deleted");



                    }

Разве это не должно быть «Выбрать * из deleteEtudiant (: id_)»; ?

РЕДАКТИРОВАТЬ: Ответьте на другой вопрос:

  conn.Open();
                sql = "insert into etudiant (Nom, prenom, sexe) " +
                     "values(@Nom, @prenom,  @sexe);";
                cmd = new NpgsqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("nom", bunifuMaterialTextbox1.Text);
                cmd.Parameters.AddWithValue("prenom", bunifuMaterialTextbox2.Text);
                //cmd.Parameters.AddWithValue("Age", bunifuMaterialTextbox2.ToString());//
                cmd.Parameters.AddWithValue("sexe", bunifuMaterialTextbox3.Text);
                //cmd.Parameters.AddWithValue("Num", bunifuMaterialTextbox6.Text);
                //cmd.Parameters.AddWithValue("Classess", bunifuMaterialTextbox7.Text);
                 int result = (int)cmd.ExecuteScalar();

Вам необходимо поставить «@» в свои параметры. Вот так: потому что вы говорите, что в значениях имя параметра (@Nom, @prenom, @sexe); ";

cmd = new NpgsqlCommand(sql, conn);
                        cmd.Parameters.AddWithValue("@nom", bunifuMaterialTextbox1.Text);
                        cmd.Parameters.AddWithValue("@prenom", bunifuMaterialTextbox2.Text);
    cmd.Parameters.AddWithValue("@sexe", bunifuMaterialTextbox3.Text);
0 голосов
/ 28 мая 2020

Я думаю, что проблема в ExecuteScalar (), используйте вместо него ExecuteNonQuery ();

int result = (int)cmd.ExecuteScalar();

замените его на:

int result = cmd.ExecuteNonQuery();
...