请问高手,数据集循环问题?高分相送?在线等,急

时间:2022-04-21 21:27:16
这个问题困扰了我两天了,跟踪调试发现了,下次循环里面数据集的条数是上一个数据集的条数,在下一次循环才是本次数据集的条数,不知为何?请高手帮忙?具体代码如下:

 ConnStrSys = M_ConnStrSys.ConnStrSys  ‘连接数据库
 strSQL1=“select con1,con2 from table1"
Try
            jf_Adapters = New Odbc.OdbcDataAdapter(strSQLs, ConnStrSys)
            jf_Adapters.Fill(jf_DataSets)

            With jf_DataSets.Tables(0)

                If .Rows.Count <> 0 Then   

                    For j = 0 To .Rows.Count - 1  '得到条数为2

                        con1 = .Rows(j).Item(0).ToString
                        con2 = .Rows(j).Item(1).ToString
                       
   strSQL2="select con3,con4 from table2 where con3=con1"
 
        ConnStrSys = M_ConnStrSys.ConnStrSys    '再次连接数据库
                        Try
                            jf_Adapter = New Odbc.OdbcDataAdapter(strSQL, ConnStrSys)
                            jf_Adapter.Fill(jf_DataSet)
                            jf_DataSet.AcceptChanges()
                            With jf_DataSet.Tables(0) 
                                 If .Rows.Count <> 0 Then

                                    For v = 0 To .Rows.Count - 1  条数为1

                                        con3= .Rows(v).Item(0).ToString
                                        con4= .Rows(v).Item(1).ToString

                                     Next v

                                End If

                            End With

                        Catch objA As Exception
                       End Try

                 next j

                        End If

                            End With

                        Catch objA As Exception
                       End Try

  但我在第二次循环时,出现了问题,jf_DataSet.Tables(0)。rows.count应该是1 而得到的却是上次
jf_DataSets.tables(0).rows.count 为2,从而con3,con4,都是得到上面的con1,con2列的值,如果后面还有迁套循环,后面的数据集都是得到第一个数据集的条数。不知为何?请高手帮忙?

11 个解决方案

#1


你要在第一次之后,DataSet.DataTable.Remove

#2


DataSet.DataTable.Remove
处理一下吧

#3


搂主,能否说清楚一点?是用具体的dataset处理,还是你们说得直接用DataSet.DataTable.Remove 处理,你清楚所有的dataset?另外放在上述那个位置好呢?麻烦说具体好吗?我头实在弄晕了,多谢

#4


另外,我用  jf_DataSet.Tables(0).Remove 会报错,在
jf_DataSet.Tables(0)的属性里面只有clear()和dispose()
应该一样的把?

#5


不用索引,用表名来指定dataset中的datatable

#6


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim ds As New DataSet
        Dim sqlcn As New SqlConnection("server=.;database=pubs;user=sa;password=;")
        Dim sqlapa As New SqlDataAdapter("select * from authors", sqlcn)
        sqlcn.Open()
        sqlapa.Fill(ds, "tbl1")
        If ds.Tables("tbl1").Rows.Count > 0 Then
            MsgBox(ds.Tables("tbl1").Rows.Count)
        End If
        Dim sqlcmd As SqlCommand
        sqlcmd = New SqlCommand("select * from jobs", sqlcn)
        sqlapa.SelectCommand = sqlcmd
        sqlapa.Fill(ds, "tbl2")
        If ds.Tables("tbl2").Rows.Count > 0 Then
            MsgBox(ds.Tables("tbl2").Rows.Count)
        End If
        sqlapa.Dispose()
        sqlcmd.Dispose()
        sqlcn.Close()
    End Sub

#7


'用remove
Dim ds As New DataSet
        Dim sqlcn As New SqlConnection("server=.;database=pubs;user=sa;password=;")
        Dim sqlapa As New SqlDataAdapter("select * from authors", sqlcn)
        sqlcn.Open()
        sqlapa.Fill(ds)
        If ds.Tables(0).Rows.Count > 0 Then
            MsgBox(ds.Tables(0).Rows.Count)
        End If
        Dim sqlcmd As SqlCommand
        sqlcmd = New SqlCommand("select * from jobs", sqlcn)
        sqlapa.SelectCommand = sqlcmd
        '1-datatable
        Dim dt As DataTable = ds.Tables(0)
        ds.Tables.Remove(dt)     '也可以是表名为参数 如下面的可以ds.tables.remove("tb2")
        sqlapa.Fill(ds, "tbl2")
        If ds.Tables(0).Rows.Count > 0 Then
            MsgBox(ds.Tables(0).Rows.Count)
        End If
        sqlapa.Dispose()
        sqlcmd.Dispose()
        sqlcn.Close()

#8


你这样的数据集处理方式很不理想!资源浪费太大。

#9


Dataset.Dispost

#10


问题关键在于:
jf_Adapter.Fill(jf_DataSet)
jf_DataSet.AcceptChanges()
放在
 For j = 0 To .Rows.Count - 1  '得到条数为2
中!
呵呵……一次循环就执行一次
jf_Adapter.Fill(jf_DataSet)
jf_DataSet.AcceptChanges()

你想想会是什么结果?

唉!其实啊,哪有人像你那样的程序结构的啊???
楼主的编程方法需要提高啊

#11


呵呵,楼主,你好像没有看清问题喲?

#1


你要在第一次之后,DataSet.DataTable.Remove

#2


DataSet.DataTable.Remove
处理一下吧

#3


搂主,能否说清楚一点?是用具体的dataset处理,还是你们说得直接用DataSet.DataTable.Remove 处理,你清楚所有的dataset?另外放在上述那个位置好呢?麻烦说具体好吗?我头实在弄晕了,多谢

#4


另外,我用  jf_DataSet.Tables(0).Remove 会报错,在
jf_DataSet.Tables(0)的属性里面只有clear()和dispose()
应该一样的把?

#5


不用索引,用表名来指定dataset中的datatable

#6


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim ds As New DataSet
        Dim sqlcn As New SqlConnection("server=.;database=pubs;user=sa;password=;")
        Dim sqlapa As New SqlDataAdapter("select * from authors", sqlcn)
        sqlcn.Open()
        sqlapa.Fill(ds, "tbl1")
        If ds.Tables("tbl1").Rows.Count > 0 Then
            MsgBox(ds.Tables("tbl1").Rows.Count)
        End If
        Dim sqlcmd As SqlCommand
        sqlcmd = New SqlCommand("select * from jobs", sqlcn)
        sqlapa.SelectCommand = sqlcmd
        sqlapa.Fill(ds, "tbl2")
        If ds.Tables("tbl2").Rows.Count > 0 Then
            MsgBox(ds.Tables("tbl2").Rows.Count)
        End If
        sqlapa.Dispose()
        sqlcmd.Dispose()
        sqlcn.Close()
    End Sub

#7


'用remove
Dim ds As New DataSet
        Dim sqlcn As New SqlConnection("server=.;database=pubs;user=sa;password=;")
        Dim sqlapa As New SqlDataAdapter("select * from authors", sqlcn)
        sqlcn.Open()
        sqlapa.Fill(ds)
        If ds.Tables(0).Rows.Count > 0 Then
            MsgBox(ds.Tables(0).Rows.Count)
        End If
        Dim sqlcmd As SqlCommand
        sqlcmd = New SqlCommand("select * from jobs", sqlcn)
        sqlapa.SelectCommand = sqlcmd
        '1-datatable
        Dim dt As DataTable = ds.Tables(0)
        ds.Tables.Remove(dt)     '也可以是表名为参数 如下面的可以ds.tables.remove("tb2")
        sqlapa.Fill(ds, "tbl2")
        If ds.Tables(0).Rows.Count > 0 Then
            MsgBox(ds.Tables(0).Rows.Count)
        End If
        sqlapa.Dispose()
        sqlcmd.Dispose()
        sqlcn.Close()

#8


你这样的数据集处理方式很不理想!资源浪费太大。

#9


Dataset.Dispost

#10


问题关键在于:
jf_Adapter.Fill(jf_DataSet)
jf_DataSet.AcceptChanges()
放在
 For j = 0 To .Rows.Count - 1  '得到条数为2
中!
呵呵……一次循环就执行一次
jf_Adapter.Fill(jf_DataSet)
jf_DataSet.AcceptChanges()

你想想会是什么结果?

唉!其实啊,哪有人像你那样的程序结构的啊???
楼主的编程方法需要提高啊

#11


呵呵,楼主,你好像没有看清问题喲?