【问题标题】:How to delete data from datagridview and database如何从datagridview和数据库中删除数据
【发布时间】:2015-06-02 13:07:54
【问题描述】:

这是我所知道的。 datagridview 中的数据会被删除,但不会从实际的数据库 中删除。 我有一个 equipment 表,其中 name 作为列之一,也被分配为主键。 有人可以帮我解决它的数据库方面吗?

      using System;
      using System.Collections.Generic;
      using System.ComponentModel;
      using System.Data;
      using System.Drawing;
      using System.Linq;
      using System.Text;
      using System.Windows.Forms;
      using System.Data.SqlClient;
      using System.Web.UI.WebControls;
      namespace Fitness_club
   {
        public partial class editequipment : Form
   {
    SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Gym.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
    SqlDataAdapter sda;
    DataSet ds;
    DataTable dt;
    SqlCommandBuilder scb;


    public editequipment()
    {
        InitializeComponent();
    }

    public editequipment(string str)
    {
        InitializeComponent();
        groupBox1.Text = "View All";
        bindingNavigator1.Visible = false;
        dataGridView1.ReadOnly = true;
    }

    private void editequipment_Load(object sender, EventArgs e)
    {
        con = new SqlConnection();
        con.ConnectionString = (@"Data             Source=.\SQLEXPRESS;AttachDbFilename=D:\Gym.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
        con.Open();
        sda = new SqlDataAdapter("select * from equipment", con);
        ds = new DataSet();
        sda.Fill(ds);
        dataGridView1.DataSource = ds.Tables[0];

    }



    private void button1_Click_1(object sender, EventArgs e)
    {
        try
        {
            scb = new SqlCommandBuilder(sda);
            sda.Update(ds);
            MessageBox.Show("Updated Sucessfully");
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error\n" + ex.Message, "Error",   
            MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

    private void button2_Click_1(object sender, EventArgs e)
    {



        con = new SqlConnection();

        con.ConnectionString = (@"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Gym.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
        con.Open();
        foreach (DataGridViewCell onecell in dataGridView1.SelectedCells)
        {
            if (onecell.Selected)
            {
                dataGridView1.Rows.RemoveAt(onecell.RowIndex);
                try
                {

                    con.Open();
                    SqlCommand cmd = new SqlCommand("delete from equipment where name='" + Name.ToString() + "'", con);
                    cmd.ExecuteNonQuery();
                    con.Close();
                    dataGridView1.Update();
                    dataGridView1.Refresh();

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
                MessageBox.Show("Deleted sucessfully");
            }
        }
    }
}
       }

【问题讨论】:

  • 你调试过代码吗?你有什么注意事项?检查什么是查询构建,然后在 sql 中运行 select 以检查您是否得到任何删除结果
  • 是的,我已经尝试调试它所说的代码 - *System.invalidOperationException The connection was not closed at System.Data.ProviderBase.DbConnectionInternal.OpenConnection *尽管它会抛出该错误但数据会从 datagridview 中删除,但不会从数据库中删除。

标签: c# sql-server database datagridview


【解决方案1】:

检查连接是否未打开,然后只打开连接并执行删除操作。

我建议使用重新绑定数据而不是视觉删除。首先执行删除操作并重新绑定数据网格。

【讨论】:

  • 我尝试使用 'dataGridView1.Update() ;' 重新绑定和 dataGridview1.Refresh() ;'但这无济于事。我认为问题出在 sql 命令查询的某个地方,有人可以帮我解决这个查询吗?
  • @VickyGill 这似乎你是编码新手,没有可能分享你与网格相关的整个代码,我会为你做合适的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多