通过dataGridView更新数据库

时间:2013-06-05 19:29:20

标签: c# sql-server winforms datagridview

我在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;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

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

您显然不了解DataAdapter的工作原理。 DataAdapter有4个Command,分别是SelectCommand,DeleteCommand,InsertCommand,UpdateCommand。方法SelectCommand需要Fill()才能运行。方法Update()工作时需要其他命令,当然,在一般情况下,DataRows可以具有各种状态:DataRowState.Deleted,DataRowState.Added,DataRowState.Modified。 SelectCommand也需要使用CommandBuilder自动构建其他命令(在SqlClient中,即SqlCommandBuilder)。在Update()方法中传递DataTable后,将浏览该表中的所有行,并检查每个DataRow的状态以查看是否添加,删除或修改了该行,并且适配器将调用相应的Command(InsertCommand,DeleteCommand和UpdateCommand)它必须对数据库执行实际操作。

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

SqlCommandBuilder cb = new SqlCommandBuilder(adap);

请记住,使用SqlCommandBuilder()仅适用于Select查询中的单个表,如果涉及多个表,则必须为DataAdapter构建自己的命令。这并不困难,您可能希望更多地了解如何为DataAdapter构建命令。

我希望这有助于您开始使用!

答案 1 :(得分:0)

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

我能够通过此代码从gridview编辑我的数据库