none
DataGridview中的数据更改如何效率回写到数据库中 RRS feed

  • 问题

  • 我用的是VB.NET 2008, 从SQL Server2005中读取数据到数据集,并将datasets与datagridview绑定。

    数据能正常显示,dataviewgrid设置readonly为false后可以进行更改。

    有什么好的办法,将用户做出的所有更改写回数据库中。

    目前我想到的是,锁定一个主键只读,以该主键为索引,逐行更新所有datagridview数据行到数据库中。但感觉这样效率很低,有没有办法判断出哪些行被修改了,只更新这些行。或者有更自动的方法可以调用,一次性更新数据。

    我初学VB才几个月,希望老师指导

    2010年3月29日 8:59

答案

  • Hi,

    用SqlDataAdapter.Update 和 SqlCommandBuilder,例:

    Using conn As New SqlConnection(connectionString)
        Dim dad As New SqlDataAdapter()
        dad.SelectCommand = New sqlCommand("Select * FROM table1", conn)
        Dim builder As New SqlCommandBuilder(dad)
        
        conn.Open()
        
        Dim ds As New DataSet()
        dad.Fill(ds)
        
        datagridview1.DataSource = ds.Table(0)
        '改data过后
        
        adapter.Update(ds)
    End Using
    
    

    2010年3月29日 11:41

全部回复

  • Hi,

    用SqlDataAdapter.Update 和 SqlCommandBuilder,例:

    Using conn As New SqlConnection(connectionString)
        Dim dad As New SqlDataAdapter()
        dad.SelectCommand = New sqlCommand("Select * FROM table1", conn)
        Dim builder As New SqlCommandBuilder(dad)
        
        conn.Open()
        
        Dim ds As New DataSet()
        dad.Fill(ds)
        
        datagridview1.DataSource = ds.Table(0)
        '改data过后
        
        adapter.Update(ds)
    End Using
    
    

    2010年3月29日 11:41
  • 非常谢谢sanme兄的回复。已经调试通过。

    我查阅了相关帮助可以2种方法实现

     SqlDataAdapter1.Update(Dataset1.Tables("Table1"))

    或者

    TableAdapter.Update(DataSet1.Table1)

    2010年3月30日 3:13
  • 你好 Lanning,

    另外补充的是调用GetChanges方法可以获得一个只有编辑过的行的Table。DataSet.GetChanges获得一个只包含改变过的表和行的DataSet。DataTable.GetChanges获取这个表里改变过的行。但当你调用DataAdapter.Update方法时会自动更新被编辑过的行,不需要你自己去调GetChanges方法来找了。

    注意,更新数据前不要调用AcceptChanges方法,否则获不到改变过的行。

    Sincerely,
    Kira Qian
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework!
    2010年4月1日 8:50
  • 一般  从数据库读数据集到DataSet是发生在一个事件(读事件)中,而保存DataSet中的更改到数据库中则发生在另一个事件(保存事件)中,如何处理呢?
    2010年12月13日 19:25