DataSet的功能强大,但是似乎有很多细节做不了在DataReader中,有read()方法,他就像asp里面的rs.eof一样,非常方便控制,问题一:但是在DataSet里面就不知道有没有?DataSet里面的tables,能不能获得某张表里面的记录数呀,就像asp里面的recordcount属性一样,方便得到总记录数问题二:DataSet里面有没有这样对应的方法或属性??如果上面的属性在DataSet里面都没有的话:问题三:能不能将DataSet转换成DataReader对象??急呀,我需要做的是逻辑层接口一律用DataSet返回数据集到WEB层,不能用别的。谢谢!!!

解决方案 »

  1.   

    1,DataSet.Tables[0].Rows.Count
    3,用foreach(DataRow dr in DataSet.Tables[0].Rows)就可以遍历整个表
      

  2.   

    DataSet 像一个数据库一样,里面是用来保存数据表的,所以你的第一个问题应该是问在 DataTable 上面,在 ASP.NET没有像ASP里面的rs.EOF,但是也可以使用一个循环一个表中的数据,第二个问题:可以使用 TableName.Rows.Count 获取一个表中的数据量。
      

  3.   

    问题一:但是在DataSet里面就不知道有没有?
    ---没有,但是你可以通过DataSet.Tables[0].Rows[i]["ColumnName"]方便的得到某一行某一列的值
    ---DataSet.Tables[0].Rows.Count就是记录数
      

  4.   

    1  和楼上的一样DataSet.Tables[0].Rows.Count
    3  其实DataSet里面包含很多的表 你可以将DataSet里面的表转换成DataTable然后总数啊取数据啊 其实都很方便的
      

  5.   

    才转.net吧?其实dataset功能很强大的,你得多花些时间搞明白,ADO.net和ADO有很大的不同。
      

  6.   

    我也是刚转。NET,一周没睡觉。
    现在ado.net没什么问题了,程序集也好了。
    就是一个基本问题,把头搞大
    request.form("val")
    request.QueryString("val")
    取不到提交的中文数据。真奇怪。
      

  7.   

    有好长时是了,呵呵,
    DataSet就是一个内存中的数据库
    它有一个重要的属性Tables,该属性是由DataTable对象构成的集合例:
    Dim dsObj As DataSet
    Dim i As Integer
    'dsObj = .....
    'i = .....
    Dim dtObj As DataTable = dsObj.Tables(i)DataTable就是内存中的表
    它有两个重要的属性Rows和Columns
    前者是所有行的集合,后者是所有列的集合
    要知道表中有多少记录请使用DataTable.Rows.Count例:
    Dim dtObj As DataTable
    'dtObj = ....
    dtObj.Rows.Count访问某一行的语法:DataTable.Rows(i As Integer)
    访问某一行的某一列的语法:
    DataTable.Rows(i As Integer)(j As Integer)
    或者
    DataTable.Rows(i As Integer)(FieldName As String)
    遍历表的每一行可以使用For Each 或者For例:
    Dim i As Integer
    Dim dtObj As DataTable = '......
    For i = 0 To dtObj.Rows.Count - 1
        Operation(dtObj.Rows(i))
    Next
      

  8.   

    >>>问题三:能不能将DataSet转换成DataReader对象??不能。dataset其实就是一个容器一样的东西,帮你装着数据而已,他不用和数据库连接。 
    你把数据读出来,放到dataset中,然后断开数据库连接,dataset里边的东西都在,你要怎么用都可以,最后你还可以把dataset存回数据库。>>>我需要做的是逻辑层接口一律用DataSet返回数据集到WEB层,
    如果我猜的不错的话,你们公司用的应该是强类型数据集。
      

  9.   

    fill() 方法的返回值就是记录数,这个比较简单
      

  10.   

    就第一个问题而言,实际上你所关心的是ADO.net是不是能像ADO的RecordSet那样提供给你Position属性和EOF/BOF,在.net里面是通过CurrencyManager对象来管理数据源和绑定控件之间的游标的,该对象就具有读写的Position属性,请参考MSDN对该对象的具体讲解,这是在ADO.net中控制当前记录在数据源中位置的正统的、学院派的方法,其他什么for each和指定Rows对象的行索引都有缺点。
    至于把DataSet/DataTable转换成DataReader的问题,其实并不需要如此,因为实现绑定的控件最后是需要数据源实现IList接口即可,也就是说不管你是DataReader还是DataTable只要实现IList接口就可以了,你完全可以使用IList接口来操作数据源而不需要知道他到底是什么。
      

  11.   

    如果你那么喜欢DataReader,完全可以自己写一个DataSetReader嘛呵呵。