iblog 5

苹果有iphone,我有iblog

导航

ADO.NET序列化的问题

Posted on 2013-07-27 09:34  cbtech  阅读(275)  评论(0编辑  收藏  举报

  

因界面中需要读取数据库中表的内容,将服务契约的返回值类型设置为SqlDataReader,以便供GridView调用。如下面的代码所示:

   [ServiceContract]
    public interface IStudent
    {
        [OperationContract]
        SqlDataReader getAllStudent(string strsql,string tablename);

    }

 

编译时错误提示SqlDataReader无法序列化。在网络上找到的解释(http://bbs.csdn.net/topics/80509708)是:

在 ADO.NET 的三个基本数据对象 — DataReader、DataTable 和 DataSet 中,只有 DataSet 可以与 Web 服务之间传递。这是因为,为了与 Web 服务进行通信,对象必须是可序列化的。(序列化是一个过程,它用于将对象的公共属性转换为 XML,并且因为 XML 只是纯文本,所以可以将其从一个应用程序传输到另一个应用程序,并且可以穿越防火墙,从而克服了 COM 的主要障碍之一。)DataReader 无法序列化,因为它们需要到服务器的开放连接。并且,因为 DataSet 处理 DataTable 的序列化以便进行封送处理,所以您也无法传递单个 DataTable。

 将SqlDataReader换成DataSet,问题解决,如下面的代码所示:

    [ServiceContract]
    public interface IStudent
    {
        [OperationContract]
        DataSet getAllStudent(string strsql,string tablename);

    }