通过dataGridView更新数据库

本文关键字:数据库 更新 dataGridView 通过 | 更新日期: 2023-09-27 18:17:00

我在c#中有一个datagridview,我用我想要的数据库中的任何表填充它,从文本框中获取表名称。一切都很好,直到我尝试将我在datagridview中所做的更改提交到数据库。

button2是我将用于更新的按钮。我已经搜索过了,显然更新适配器应该工作,但在这种情况下没有,我不知道为什么。下面是我的代码:

public partial class Form1 : Form
{
    static string connstr = "DataSource=localhost;Database=sc2db;Trusted_Connection=True;";
    SqlConnection conn = new SqlConnection(connstr);
    public Form1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            SqlDataAdapter adap = new SqlDataAdapter();
            DataTable dt = new DataTable();
            //BindingSource bs = new BindingSource();
            SqlCommand comm = new SqlCommand("select * from " + textBox1.Text, conn);
            adap.SelectCommand = comm;
            dataGridView1.DataSource = dt;
            adap.Fill(dt);
        }
        catch (Exception ex)
        {
            label1.Text = ex.Message;
        }
    }
    private void button2_Click(object sender, EventArgs e)
    {
        try
        {
            SqlDataAdapter adap = new SqlDataAdapter();
            DataTable dt = new DataTable();
            BindingSource bs = new BindingSource();
            adap.Update(dt);
        }
        catch (Exception ex)
        {
            label1.Text = ex.Message;
        }
    }
}

通过dataGridView更新数据库

您的adap在button2_Click事件处理程序中没有任何命令(SelectCommand, DeleteCommand, InsertCommand和UpdateCommand)初始化。那么它如何更新呢?

你显然不了解DataAdapter是如何工作的。数据适配器有4个命令,分别是选择命令,删除命令,插入命令,更新命令。Fill()法的工作需要SelectCommandUpdate()工作方法需要其他命令,当然在一般情况下,datarow可以具有各种状态:删除,DataRowState。补充说,DataRowState.Modified。使用CommandBuilder(在SqlClient中,即SqlCommandBuilder)自动构建其他命令也需要SelectCommand。一旦在Update()方法中传递了一个DataTable,将浏览该表中的所有行,并检查每个DataRow的状态,以查看该行是否被添加、删除或修改,适配器将调用相应的命令(InsertCommand、DeleteCommand和UpdateCommand),它必须对数据库执行实际操作。

在您的情况下,您可以尝试将adap声明为公共,并在调用Update()方法之前使用SqlCommandBuilder为其构建其他命令,如下所示:

SqlCommandBuilder cb = new SqlCommandBuilder(adap);

请记住,使用SqlCommandBuilder()只适用于Select查询中的单个表,如果涉及到多个表,则必须为DataAdapter构建自己的命令。这并不难,您可能希望搜索更多关于如何为DataAdapter构建命令的信息。

我希望这能帮助你开始!

private void button3_Click(object sender, EventArgs e)
        {
            scb = new SqlCommandBuilder(sqlDataAdapter1);
            sqlDataAdapter1.Update(dataSetUser);
        }

我能够编辑我的数据库从gridview这个代码