Member 12582157 Ответов: 2

Я хочу удалить строку Data gridview


,if i delete a single row in the data grid view mean that deleted row  will remove from the grid view, but i have this error "ExecuteNonQuery: CommandText property has not been initialized"  


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

       string update="";
       DateTime now = DateTime.Now;
       private void delete()
       {
           try
           {
               if ((gvClass.Rows.Count > 0) || gvClass.CurrentCell.ColumnIndex < 1)
               {
                   search = Convert.ToString(gvClass.CurrentRow.Cells[0].Value.ToString());
               }
               if (MessageBox.Show("Do you want to Delete?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.No)
               {
               }
               else
               {
                   con.Open();
                   string query1 = "select * from tblClass  WHERE  ID LIKE '" + search + "' and status=1  order by ID ";
                   SqlCommand cmd1 = new SqlCommand(query1, con);
                   SqlDataReader dr1 = cmd1.ExecuteReader();
                   if (dr1.Read())
                   {
                       string f = dr1["ID"].ToString();
                       if (search == f)
                       {
                          update    = "update tblClass set status=0,delete_time=convert(datetime,'" + now + "', 103) where  ID='" + search + "' ";
                       }
                   }

                   dr1.Close();
                   cmd1.ExecuteNonQuery();

                   con.Close();

                   con.Open();
                   cmd = new SqlCommand(update, con);
                   cmd.ExecuteNonQuery();
                   con.Close();
                   MessageBox.Show("Deleted SuccessFully");
                   view();


               }
           }
           catch (Exception ex)
           {
               throw ex;

           }

       }


private void view()
       {
           string view ="";
           con.Open();
           SqlDataAdapter da =new SqlDataAdapter("select * from tblClass where status =1",con);
           DataSet ds = new DataSet ();
           this.gvClass.Rows.Clear();
           gvClass.Rows.Clear();
           da.Fill(ds);
           DataTable dt =ds.Tables[0];

           if (dt.Rows.Count != 0)
           {
               gvClass.Rows.Add(dt.Rows.Count);
               for (int i = 0; i < dt.Rows.Count; i++)
               {
                   for (int i1 = 0; i1 < gvClass.Rows.Count - 0; i1++)
                   {
                       gvClass.Rows[i1].Cells[0].Value = (i1 + 1).ToString();
                   }
                   gvClass.Rows[i].Cells["Id"].Value = Convert.ToString(dt.Rows[i]["Id"].ToString());
                   gvClass.Rows[i].Cells["Name"].Value = Convert.ToString(dt.Rows[i]["Name"].ToString());

               }
           }
               con.Close();

           }

Vjay Y

Поскольку каждая проблема приходит с решением, внимательно посмотрите на исключение. Он утверждает, что "свойство CommandText не было инициализировано", что означает, что текст команды передается как нулевое или пустое значение.

2 Ответов

Рейтинг:
14

Karthik_Mahalingam

Я надеюсь, что ошибка будет на этом наборе кодов

Цитата:
если (поиск = = f)
{
обновление = "Обновление tblClass установить статус=0,delete_time=конвертировать(типа datetime,'" + теперь + "', 103), где ID='" + поиск + "' ";
}
}
ДР1.Рядом();
cmd1.Метод executenonquery();
кон.Рядом();
кон.Открыть();
cmd = new SqlCommand(update, con);
УМК.Метод executenonquery();

_______________________________________________________________________________________

Если условие (search == f) не получает удовлетворения, то update переменная будет empty
поэтому, когда вы попытаетесь выполнить пустую строку, это приведет к ошибке, о которой Вы упомянули в посте.

Переместите все коды внутрь condition и попробуй.

внимание: никогда не объединяйте операторы sql, это приведет к в SQL инжекцион[^]N атак
всегда использовать Параметризованные запросы для предотвращения атак SQL-инъекций в SQL Server[^]


Рейтинг:
0

Muhammad Rehbar Sheikh

If you have AllowUserToAddRows property enabled on your DataGridView then you might be accidently deleting the empty row at the bottom of the DataView which is a placeholder for the next user created row. Try disabling this option if not required, otherwise try using code like this.

foreach (DataGridViewRow row in dataGridView1.SelectedRows)
{
    if(!row.IsNewRow)
       dataGridView1.Rows.Remove(row);
}

SqlConnection con = new SqlConnection(ConString);
//create and initialise connection object properly.

open and close SQL connection and DataReader object properly.

if ((rdr != null))
                            { rdr.Close(); }

                            if (con.State == ConnectionState.Open)
                            { con.Close(); }

carefully look at the exception and your logic. and CommandText property initialized properly.