datatable的reset,clear与remove

前段时间在做程序的时候出了这么一档子事:

某个按钮的处理函数:

Private Sub btn_check_data_invo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_check_data_invo.Click

        Dim objconn As New Odbc.OdbcConnection  'odbc连接
        Dim objDataAdapter As New Odbc.OdbcDataAdapter  'odbc适配器
        Dim objtable As DataTable   'table
        Dim cmdtable As Odbc.OdbcCommand = New Odbc.OdbcCommand  'odbc命令

        If objconn.State = ConnectionState.Closed Then
            objconn.ConnectionString = "DSN=aa;UID=;ASC=0;SR=1;GST=0;DB=hh;DBPR=TCP;DBH=hh;DBS=aa;OIDP=TCP;OIDS=SYMIXOIB;DBOS=UNIX;DBAM=Via Server;OIDH=hh"
            objconn.Open()  '打开连接
            cmdtable.Connection = objconn
        End If

        If objds.Tables.IndexOf("db1") >= 0 Then
            objds.Tables("db1").Reset()       ' ---------------------------------------> 注意这一行
        End If 

        cmdtable.CommandText = "select * from dataset1"
        objDataAdapter.SelectCommand = cmdtable
        objDataAdapter.Fill(objds, "db1")
        objconn.Close()

        datagrid1.datasource  = objds.Tables("db1")

End Sub

结果在第一次点击按钮的时候没问题,第二次点击时datagrid就变成只有列(已经用设计器指定了style),

没有数据,期间也设了断点,发现表中是有数据的,但就是绑定不上。

同事让我用clear试试,换成objds.Tables("db1").Clear()以后果然就可以多次绑定。

上网查了查,只有说clear不行的,一般都是说reset没有问题。比如这篇帖子:

http://www.21cnvip.com/csdn/default.aspx?q=20040328/16/2895888.html

因为clear每次只是清除数据而不清除表结构,而reset才是将表至于初始状态,这样再次调用时可能会与原来的行冲突

还有说将表dispose,然后每次重建,并比较了三种方法,发现dispose要比clear和reset更快一点

最后选了类似于dispose的方法objds.Tables.Remove("db1"),然后重新fill

但还是不理解为何reset不行,到底reset时候微软都干了啥??

你可能感兴趣的:(.NET)