ADO.NET序列化的問題

  

因界面中須要讀取數據庫中表的內容,將服務契約的返回值類型設置爲SqlDataReader,以便供GridView調用。以下面的代碼所示:sql

   [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。spa

 將SqlDataReader換成DataSet,問題解決,以下面的代碼所示:.net

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

    }get

相關文章
相關標籤/搜索