代码中没有错误,但尝试更新时表中没有发生变化
Posted
技术标签:
【中文标题】代码中没有错误,但尝试更新时表中没有发生变化【英文标题】:No errors in the code, but no changes occur in the table when trying to update it 【发布时间】:2021-09-20 19:44:28 【问题描述】:我正在尝试在 C# Win Form 中更新我的数据。 我创建了一个“更新”按钮,但每当我运行它时,我都看不到表中有任何更改和任何发生的错误
void insertdata()
cmd = connection.CreateCommand();
cmd.CommandText = "SELECT * FROM airport";
adapter.SelectCommand = cmd;
table.Clear();
adapter.Fill(table);
dgv.DataSource = table;
private void button_update_Click(object sender, EventArgs e)
cmd = connection.CreateCommand();
cmd.CommandText = "UPDATE airport SET p_name = '"+textBox2.Text+ "',p_age = '" + textBox3.Text + "', c_name = '" + textBox4.Text + "', date = '" + textBox5.Text + "', city_t = '" + textBox6.Text + "', city_f ='" + textBox7.Text + "', trip_num = '" + textBox8.Text + "', plane_type = '" + textBox9.Text+"' WHERE p_id = '"+textBox1+"'";
cmd.ExecuteNonQuery();
insertdata();
我已经尝试添加
connection.Open();
connection.Close();
但是,我不断收到:“System.InvalidOperationException:”连接未关闭。连接已打开。”
我的代码中是否有任何更改以更新表中的行,因为每当我运行它时,我都没有收到任何错误。
【问题讨论】:
这是因为连接已经打开。更新后连接未关闭,可能会再次打开以供选择。能否贴出打开和关闭连接的代码? 每次你想运行一些SQL,然后new
建立一个连接,完成后打开它并处理它。这将解决您 98% 的问题。然后阅读***.com/questions/14376473/…。然后用有意义的名字命名你的文本框。
@T.kowshikYedida connection.Open(); cmd = connection.CreateCommand(); cmd.CommandText = "更新机场 SET p_name = '"+textBox2.Text+ "',p_age = '" + textBox3.Text + "', c_name = '" + textBox4.Text + "', date = '" + textBox5.文本 + "',city_t = '" + textBox6.Text + "',city_f ='" + textBox7.Text + "',trip_num = '" + textBox8.Text + "',plane_type = '" + textBox9.Text+" ' 其中 p_id = '"+textBox1+"'"; cmd.ExecuteNonQuery();插入数据();连接.Close();
(可能)旁注:不要使用字符串插值或连接将值获取到 SQL 查询中。这很容易出错,并且可能使您的程序容易受到 SQL 注入攻击。使用参数化查询。见"How can I add user-supplied input to an SQL statement?"。
@qrttttt 如果您听从我的建议,问题就会停止。
【参考方案1】:
请注意你写的
WHERE p_id = '"+textBox1+"'
代替
WHERE p_id = '"+textBox1.Text+"'
可能您没有与 textBox 相同的 ID...
【讨论】:
以上是关于代码中没有错误,但尝试更新时表中没有发生变化的主要内容,如果未能解决你的问题,请参考以下文章