我有两种形式。一个用于库存条目,另一个用于查看网格视图中的库存。所以现在当我需要删除一条记录时,我曾经从网格视图中选择记录,然后双击该单元格,然后输入' stock entry'将打开所有现有记录。然后,当我点击“删除”按钮时,它说它已成功删除但在网格视图或数据库中没有任何变化..数据仍然存在。请帮帮我谢谢。
链接到我的sql:https://drive.google.com/open?id=1D5EpLZZ-2yVlOphaSBxOSC2vVLGabZ7W
我的ID设置为自动递增,索引类型设置为我的股票是"唯一"
private void bunifuFlatButton3_Click(object sender, EventArgs e)
{
try
{
conn.Close();
conn.Open();
String DeleteQuery = "Delete from Stock_Jewelry where ID ='" + txt_ID + "';";
SqlDataAdapter execute = new SqlDataAdapter(DeleteQuery, conn);
execute.SelectCommand.ExecuteNonQuery();
MessageBox.Show("You've deleted successfully!", "Successful Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
conn.Close();
this.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
conn.Close();
}
答案 0 :(得分:0)
尝试这个,因为Id类型是int,txt_ID必须转换为int;
String DeleteQuery = "Delete from Stock_Jewelry where ID =" + txt_ID;
答案 1 :(得分:0)
正如人们提到您的代码注入不安全,最好使用SqlParameter
,但问题是:
请SqlDataAdapter
:
try
{
SqlConnection connection = new SqlConnection(conn);
SqlDataAdapter adapter = new SqlDataAdapter();
connection.Open();
adapter.DeleteCommand = connection.CreateCommand();
adapter.DeleteCommand.CommandText = "Delete from Stock_Jewelry where ID =@id";
adapter.DeleteCommand.Parameters.AddWithValue("@id", txt_ID.Trim());
adapter.DeleteCommand.ExecuteNonQuery();
MessageBox.Show("Row(s) deleted !! ");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
或最简单的方式:
SqlConnection con = new SqlConnection(conn);
SqlCommand cmd = new SqlCommand("Delete from Stock_Jewelry where ID =@id", con);
con.Open();
cmd.Parameters.AddWithValue("@id", txt_ID.Trim());
cmd.ExecuteNonQuery();
注意:
当Query在DB中运行时没有任何问题,这意味着你的代码没有问题,否则让我们知道另一方面的异常是什么,txt_ID
存在问题,例如其中的空格,或者输入的ID在DB中不存在。