none
dataadapter更新不了数据 RRS feed

  • 问题

  • 在dataGridView中直接修改可以更新到数据库,但是用代码手动修改单元格的关联值,却无法更新到数据库

    更新代码

    using (SqlDataAdapter adapter = new SqlDataAdapter("Select * from users", "Data Source=localhost;Initial Catalog=HotelSystem;Integrated Security=true"))
                {
                    using (SqlCommandBuilder b = new SqlCommandBuilder(adapter))
                    {
                        adapter.DeleteCommand = b.GetDeleteCommand();
                        adapter.UpdateCommand = b.GetUpdateCommand();
                        adapter.Update(table);
                    }
                }

    读取代码

    table.Clear();
                using (SqlDataAdapter adapter = new SqlDataAdapter("Select * from users", "Data Source=localhost;Initial Catalog=HotelSystem;Integrated Security=true"))
                {
                    adapter.Fill(table);
                }
                dataGridView1.DataSource = table;

    table是全局的DATATABLE
    表中userid是主键
    表中SEX做了check约束 sex = ‘男’ or sex = ‘女’
    其他的没什么了
    2009年11月5日 4:08

答案

  • 1 使用 BindingSource 绑定 DataGridView
    2 更新前不能调用 table.AcceptChanges();更新的代码建议使用如下的方式。
    3 建议使用强类型的数据集的方式来获取或更新数据。

    DataTable updateDT = table.GetChanges();
    if (updateDT == null) 
        return;
    
    using (SqlDataAdapter adapter = new SqlDataAdapter("Select * from users"
        , "Data Source=localhost;Initial Catalog=HotelSystem;Integrated Security=true"))
    {
        using (SqlCommandBuilder b = new SqlCommandBuilder(adapter))
        {
            adapter.Update(updateDT);
            table.AcceptChanges();// 提交更新
        }
    }


    知识改变命运,奋斗成就人生!
    • 已标记为答案 Jonas Gao 2009年11月6日 3:03
    2009年11月5日 4:31
    版主

全部回复

  • 1 使用 BindingSource 绑定 DataGridView
    2 更新前不能调用 table.AcceptChanges();更新的代码建议使用如下的方式。
    3 建议使用强类型的数据集的方式来获取或更新数据。

    DataTable updateDT = table.GetChanges();
    if (updateDT == null) 
        return;
    
    using (SqlDataAdapter adapter = new SqlDataAdapter("Select * from users"
        , "Data Source=localhost;Initial Catalog=HotelSystem;Integrated Security=true"))
    {
        using (SqlCommandBuilder b = new SqlCommandBuilder(adapter))
        {
            adapter.Update(updateDT);
            table.AcceptChanges();// 提交更新
        }
    }


    知识改变命运,奋斗成就人生!
    • 已标记为答案 Jonas Gao 2009年11月6日 3:03
    2009年11月5日 4:31
    版主
  • DataGridView.DataSource= table 是与 BindingSource 绑定 DataGridView 效果相同吗
    2009年11月5日 9:24
  • 在试图中修改时可以更新到数据库中的,就是在datagridview中直接修改

    但是使用 datagridviewcell.value 来修改 就无法更新到数据库
    2009年11月5日 9:28
  • DataGridView.DataSource= table 是与 BindingSource 绑定 DataGridView 效果相同吗
    使用BindingSource可以实时的反映数据源的变化,不用重新绑定!

    周雪峰
    2009年11月5日 11:13
    版主
  • 恩,谢谢。不过还是没有解决我的问题
    我曾经做过一个项目,当时也是代码修改单元格的VALUE,最后是可以更新到数据库的

    现在这个项目中 也这样却无法更新到数据库中,但是直接在试图中修改却可以

    如果大家谁知道就发我邮箱吧 gaopinsong@live.cn

    在此就不再讨论了 还是谢谢回复的人 我又学到了些东西
    2009年11月6日 3:03