建议不要返回DataReader,因为DataReader与数据库是常连接的
,在操作DataReader时,始终要打开连接

解决方案 »

  1.   

    哦,我是说只需要得到一条记录的时候方便一点。
    如果只需查询一条记录也用dataset 是不是麻烦一点阿?
      

  2.   

    dr=cmd.ExecuteReader(CommandBehavior.CloseConnection);
      

  3.   

    可以返回DataReader,不过这个DataReader在使用后要用Close来关闭.
    如果不想这么做,可以在你的方法里声明一个数组或HashTable之类的变量,在方法里面把DataReader.Read()完后数据放入其中,然后可以把这个变量返回,不过这样外面看到的就是你的这个变量了,和DataReader没有关系了.
      

  4.   

    我有一个和你相似的的想法,不过我是做了,我就是返回了一个DataReader,然后我在外面使用后手动把它关闭了.其实我觉得这样没有什么不好的,只不过是处理方式和DataSet等不同罢了.还看你的这个方法的执行时是在服务器上还是在客户端,如果是在客户端的话,最好不这样,这样和数据库交互太多了.
      

  5.   

    hbxtlhx(下着春雨的天) 3Q
    我是说需要一条记录的时候用这个方法,而这个方法本身得到记录之后就关闭,就是 
    con.Open();
    dr=cmd.ExecuteReader(cmdTxt);
    con.close();
    然后把dr得到值返回,这个方法只能得到一条记录,不如 select count(*) from myTable这样的命令,只需一条记录,用DataSet不是很麻烦吗?
    你觉得如何做呢?
      

  6.   

    我也自己作了数据库接口,兼容不同的数据类型。DATATable比较好办,可以返回一个通用的类型,但DataReader就不行了。而且有不能打开多连接的问题。我现在的做法是另外在编写一个类,在这个类里编写与DataReader相同的方法,列如Read,GetValue等,在方法里处理不同数据库类型的问题。因为我们一般应用也不需要使用到DataReader的所有方法和属性,所以也不累,:)。而且经过测试,效率也还可以,影响很小。
      

  7.   

    jianglizhu(jianglizhu) 3Q
    能把你写的数据接口发到我的信箱里面吗?谢谢了
    [email protected]