2016-11-24 69 views
2

我编写了更新按钮和删除按钮的代码。 我的目的是更新和删除我插入到数据库中的数据(这是用phpmyadmin在mysql中创建的)。更新和删除按钮C#

更新按钮代码:

void ModificaBtnClick(object sender, EventArgs e) 
    { 
     Connessione.Open(); 
     MySqlDataAdapter SDA=new MySqlDataAdapter("UPDATE INTO GARA set nome_gara='"+textBox1.Text+"',giudice='"+textBox2.Text+"',località='"+textBox3.Text+"',data='"+textBox4.Text+"',tpsopm='"+textBox5.Text+"',tpmopm='"+textBox6.Text+"',tpstot='"+textBox7+"',tpmtot='"+textBox8.Text+"')VALUES'"+textBox1.Text+"','"+textBox2.Text+"','"+textBox3.Text+"','"+textBox4.Text+"','"+textBox5.Text+"','"+textBox6.Text+"','"+textBox7.Text+"','"+textBox8.Text+"')",Connessione); 
     SDA.SelectCommand.ExecuteNonQuery(); 
     Connessione.Close(); 

     MessageBox.Show("Dati modificati correttamente!"); 

    } 

删除按钮代码:

void CancellaBtnClick(object sender, EventArgs e) 
    { 
     Connessione.Open(); 
     MySqlDataAdapter SDA=new MySqlDataAdapter("DELETE FROM GARA(nome_gara,giudice,località,data,tpsopm,tpmopm,tpstot,tpmtot)VALUES'"+textBox1.Text+"','"+textBox2.Text+"','"+textBox3.Text+"','"+textBox4.Text+"','"+textBox5.Text+"','"+textBox6.Text+"','"+textBox7.Text+"','"+textBox8.Text+"')",Connessione); 
     SDA.SelectCommand.ExecuteNonQuery(); 
     Connessione.Close(); 
     MessageBox.Show("Dati cancellati correttamente!"); 
    } 

我没有语法错误,但是当我运行该程序,我尝试修改或删除数据时,编译器向我展示一个未处理的异常(抛出了一个类型为MySql.Data.MySqlClient.MySqlException的未处理的异常)。当我退出窗口时,选择这条线SDA.SelectCommand.ExecuteNonQuery();

我使用相同的指令插入按钮,但它的工作原理。

你能帮助我吗?

编辑:我试过你的解决方案,但值不更新到数据库。我可以修改他们到DataGridView的,但是当我按下更新按钮不改变

+5

语法不正确,'DELE TE从GARA WHERE ID = @ ID',你有'DELETE FROM GARA(Columns ...)'。如果你想保留你的数据库,也可以使用sql-parameters而不是字符串连接。否则,你打开sql注入。除此之外,直接使用'MySqlCommand'而不是'MySqlDataAdapter'。 –

+0

内部例外应该为您提供更具体的信息 – DoctorMick

+0

您应该使用参数。千万不要将这些值串联到你的查询中。阅读SQL注入 –

回答

2

更新不需要INTO但只有

UPDATE GARA 
SET set nome_gara='"+textBox1.Text+"' 
,giudice='"+textBox2.Text+"' 
,località='"+textBox3.Text+"' 
,..... 

eventulally添加你需要

的更新条件的行

删除不需要的值与你匹配删除行,其中的条件如:

DELETE FROM GARA 
WHERE nome_gara='"+textBox1.Text+"'" 

为妥一定where条件

,并在字符串连接,你是在危险中为SQL注入

+2

'SQL注入'...确实要考虑它。 – Rahul

+0

@Rahul正确..回答更新此recccomantion – scaisEdge

+0

@scaisEdge如何显示如何做到这一点,而不是建议做到这一点?OP显然是新的,那么他应该如何执行你的建议? –

2

我并不想严酷的声音认真,但是你的代码是不是很好。点改善:

  1. 使用正确的SQL
  2. 停止使用MySqlDataAdapter当你不需要
  3. 使用paramterized查询,以避免SQL注入(也没有:没有理由不对因不这样做!)

这三点会导致下面的代码:

void ModificaBtnClick(object sender, EventArgs e) 
{ 
    Connessione.Open(); 
    MySqlCommand cmd = new MySqlCommand("UPDATE GARA set [email protected],[email protected],località[email protected],[email protected] ...",Connessione); 

    cmd.Parameters.AddWithValue("@nomegara", textBox1.Text); 
    cmd.Parameters.AddWithValue("@giudice", textBox2.Text); 
    ... 

    cmd.ExecuteNonQuery(); 

    MessageBox.Show("Dati modificati correttamente!"); 
} 

void CancellaBtnClick(object sender, EventArgs e) 
{ 
    Connessione.Open(); 
    MySqlCommand cmd =new MySqlCommand("DELETE FROM GARA WHERE Field = @value, ...",Connessione); 

    cmd.Parameters.AddWithValue("@value", ...); 
    ... 

    cmd.ExecuteNonQuery(); 
    MessageBox.Show("Dati cancellati correttamente!"); 
} 
+0

我知道我的代码很完美。我是初学者,我仍然有很多东西要学。感谢您的建议 – Matteo

+0

我知道,我可以从您的代码中知道:-)我刚刚说过它显示您更改代码的紧迫程度。 –

+0

我试过你的解决方案,但是我的ExecuteNonQuery()有同样的问题。有任何想法吗? – Matteo