Как удалить выбранную текущую строку в сетке данных из SQL (c#)

#c# #sql-server #datagridview #sql-delete #delete-row

Вопрос:

Я хочу удалить выбранную текущую строку в datagrid из среды Microsoft SQL Server Management Studio, но это приводит к синтаксической ошибке, что бы я ни делал. (Я нажму на строку и удалю данные в SQL)Вот коды и ошибки, которые я получил:

Вы можете мне помочь, дорогие друзья? Спасибо.

Во-первых: ОШИБКА : «Неправильный синтаксис рядом»=»».

         private void VeriSİL()
        {
            baglan.Open();

            string bgn = cwGrid.CurrentRow.Cells[0].Value.ToString();
            string m1 = cwGrid.CurrentRow.Cells[1].Value.ToString();
            string m2 = cwGrid.CurrentRow.Cells[2].Value.ToString();
            string m3 = cwGrid.CurrentRow.Cells[3].Value.ToString();
            string kturu = cwGrid.CurrentRow.Cells[4].Value.ToString();
            string m1m = cwGrid.CurrentRow.Cells[5].Value.ToString();
            string m2m = cwGrid.CurrentRow.Cells[6].Value.ToString();
            string m3m = cwGrid.CurrentRow.Cells[7].Value.ToString();
            string urunno = cwGrid.CurrentRow.Cells[8].Value.ToString();
            string guc = cwGrid.CurrentRow.Cells[9].Value.ToString();
            string hiz = cwGrid.CurrentRow.Cells[10].Value.ToString();
            string odk = cwGrid.CurrentRow.Cells[11].Value.ToString();
            string gaz = cwGrid.CurrentRow.Cells[12].Value.ToString();
            string aci = cwGrid.CurrentRow.Cells[13].Value.ToString();
            string noz = cwGrid.CurrentRow.Cells[14].Value.ToString();
            string sur = cwGrid.CurrentRow.Cells[15].Value.ToString();
            string foto = cwGrid.CurrentRow.Cells[16].Value.ToString();
            string not = cwGrid.CurrentRow.Cells[17].Value.ToString();

            SqlCommand komut = new SqlCommand("delete from CW where Beğeni = '"   bgn   "' AND [1.Malz] = '"   m1   "' AND [2.Malz] = '"   m2   "' AND [3.Malz] = '"   m3   "' AND Kaynaktürü = '"   kturu   "' AND [1/mm] = '"   m1m   "' AND [2/mm] = '"   m2m   "' AND [3/mm] = '"   m3m   "' AND ÜrünNo = '"   urunno   "'AND Güç = '"   guc   "' AND Hız = '"   hiz   "' AND Gaz = = '"   gaz   "' AND Açı = '"   aci   "' AND Nozzle = '"   noz   "' AND Süre = '"   sur   "' AND Foto= '"   foto   "' AND [Not]= '"   noz   "'", baglan);
            komut.ExecuteNonQuery();
            baglan.Close();
}
   private void silButton_Click(object sender, EventArgs e)
    {
        VeriSİL();
    }
 

Моя вторая попытка и ошибка : «Неправильный синтаксис рядом»,»».

 private void VeriSİL()
         {
                baglan.Open();
                SqlCommand komut = new SqlCommand("Delete CW WHERE Beğeni=@bgn,[1.Malz]=@m1,[2.Malz]=@m2,[3.Malz]=@m3,KaynakTürü=@kturu,[1/mm]=@m1m,[2/mm]=@m2m,[3/mm]=@m3m,Güç=@guc,Hız=@hiz,Odak=@odk,Gaz=@gaz,Açı=@aci,Nozzle=@noz,Süre=@sur,Foto=@foto,[Not]=@not,ÜrünNo=@urunno", baglan);
                komut.Parameters.AddWithValue("@bgn", cwGrid.CurrentRow.Cells[0].Value.ToString());
                komut.Parameters.AddWithValue("@m1", cwGrid.CurrentRow.Cells[1].Value.ToString());
                komut.Parameters.AddWithValue("@m2", cwGrid.CurrentRow.Cells[2].Value.ToString());
                komut.Parameters.AddWithValue("@m3", cwGrid.CurrentRow.Cells[3].Value.ToString());
                komut.Parameters.AddWithValue("@kturu", cwGrid.CurrentRow.Cells[4].Value.ToString());
                komut.Parameters.AddWithValue("@m1m", cwGrid.CurrentRow.Cells[5].Value.ToString());
                komut.Parameters.AddWithValue("@m2m", cwGrid.CurrentRow.Cells[6].Value.ToString());
                komut.Parameters.AddWithValue("@m3m", cwGrid.CurrentRow.Cells[7].Value.ToString());
                komut.Parameters.AddWithValue("@urunno", cwGrid.CurrentRow.Cells[8].Value.ToString());
                komut.Parameters.AddWithValue("@guc", cwGrid.CurrentRow.Cells[9].Value.ToString());
                komut.Parameters.AddWithValue("@hiz", cwGrid.CurrentRow.Cells[10].Value.ToString());
                komut.Parameters.AddWithValue("@odk", cwGrid.CurrentRow.Cells[11].Value.ToString());
                komut.Parameters.AddWithValue("@gaz", cwGrid.CurrentRow.Cells[12].Value.ToString());
                komut.Parameters.AddWithValue("@aci", cwGrid.CurrentRow.Cells[13].Value.ToString());
                komut.Parameters.AddWithValue("@noz", cwGrid.CurrentRow.Cells[14].Value.ToString());
                komut.Parameters.AddWithValue("@sur", cwGrid.CurrentRow.Cells[15].Value.ToString());
                komut.Parameters.AddWithValue("@foto", cwGrid.CurrentRow.Cells[16].Value.ToString());
                komut.Parameters.AddWithValue("@not", cwGrid.CurrentRow.Cells[17].Value.ToString());
                komut.ExecuteNonQuery();
                MessageBox.Show("Silme İşlemi Başarılı.");
                baglan.Close();
    }
            private void silButton_Click(object sender, EventArgs e)
            {
                VeriSİL();
            }
 

Моя последняя попытка и ошибка: «Выражение не булева типа, указанное в контексте, где ожидается условие, рядом»,».»

 private void VeriSİL()
             {
            baglan.Open();
            SqlCommand komut = new SqlCommand("Delete from CW where Beğeni,[1.Malz],[2.Malz],[3.Malz],KaynakTürü,[1/mm],[2/mm],[3/mm],ÜrünNo,Güç,Hız,Gaz,Odak,Açı,Nozzle,Süre,Foto,[Not] like '"  
                 cwGrid.CurrentRow.Cells[0].Value.ToString()   "' , '"  
                cwGrid.CurrentRow.Cells[1].Value.ToString()   "' , '"  
                cwGrid.CurrentRow.Cells[2].Value.ToString()   "' , '"  
                cwGrid.CurrentRow.Cells[3].Value.ToString()   "' , '"  
                cwGrid.CurrentRow.Cells[4].Value.ToString()   "' , '"  
                cwGrid.CurrentRow.Cells[5].Value.ToString()   "' , '"  
                cwGrid.CurrentRow.Cells[6].Value.ToString()   "' , '"  
                cwGrid.CurrentRow.Cells[7].Value.ToString()   "' , '"  
                cwGrid.CurrentRow.Cells[8].Value.ToString()   "' , '"  
                cwGrid.CurrentRow.Cells[9].Value.ToString()   "' , '"  
                cwGrid.CurrentRow.Cells[10].Value.ToString()   "' , '"  
                cwGrid.CurrentRow.Cells[11].Value.ToString()   "' , '"  
                cwGrid.CurrentRow.Cells[12].Value.ToString()   "' , '"  
                cwGrid.CurrentRow.Cells[13].Value.ToString()   "' , '"  
                cwGrid.CurrentRow.Cells[14].Value.ToString()   "' , '"  
                cwGrid.CurrentRow.Cells[15].Value.ToString()   "' , '"  
                cwGrid.CurrentRow.Cells[16].Value.ToString()   "' , '"  
                cwGrid.CurrentRow.Cells[17].Value.ToString()   "'", baglan);


            komut.ExecuteNonQuery();
            MessageBox.Show("Silme İşlemi Başarılı.");
            baglan.Close();
}
                private void silButton_Click(object sender, EventArgs e)
                {
                    VeriSİL();
                }
 

Комментарии:

1. Ваша первая попытка должна быть отброшена. Он широко открыт для внедрения sql. Ваша вторая попытка с использованием параметров лучше, но ваш синтаксис не является допустимым sql. Вероятно, вам не нужно просматривать каждую отдельную колонку в вашем удалении, только первичный ключ.

2. Прежде всего, научитесь использовать параметры, чтобы избежать sql-инъекции и ошибки, которую вы получаете. Кроме того, если в вашей строке есть поле уникального идентификатора, вы просто удалите его на основе этого, и не все эти поля будут соответствовать вашим значениям, что все равно может привести к удалению более одной записи.

3. @SeanLange Как я могу это сделать? потому что я не использую уникальный идентификатор. Я попытался «Удалить ИЗ CW Begeni=@bgn…» Удалите CW, где начинается=…» Когда я исследовал в Интернете, я попробовал большинство из них (удалить из CW, удалить CW, где..), и все результаты одинаковы и ошибка. У вас есть какие-нибудь предложения по этому поводу?

4. Ваш синтаксис в версии параметра вашего поста содержит все условия, разделенные запятой, что не является допустимым синтаксисом. Это, вероятно, должно быть «И». Поместите уникальные идентификаторы в свои таблицы.

5. Не используйте addwithvalue