天天看點

[翻譯]如何使用webservice作為資料源去生成Microsoft Reporting Services 2005的報表

原文位址:http://www.codeproject.com/KB/reporting-services/WebAndReportingServices.aspx

[原文×××]

[翻譯]如何使用webservice作為資料源去生成Microsoft Reporting Services 2005的報表

原文釋出日期:2006.05.18

作者:Dimitar Madjarov

翻譯:webabcd

[翻譯]如何使用webservice作為資料源去生成Microsoft Reporting Services 2005的報表

介紹

好幾個月的時間了,我一直在學習Microsoft Reporting Services 2005的一些新的功能。其中之一就是如何使用webservice作資料源。但是很不幸,我無法在MSDN和SQL Server 2005的相關書籍中找到詳細的幫助資訊。是以我花了好長時間來搞定這個問題。希望通過分享我的Microsoft Reporting Services 2005的相關知識能夠節省你的開發時間。

建立一個webservice

第一步是建立一個webservice,稍後我将用這個webservice作為我的報表的資料源。這是非常重要的一步,因為我們要将資料轉換成一個XmlDataDocument。如果沒有這步轉換,我們将不能得到使用webservice的web方法取得資料的結果。實作這個轉換的C#代碼如下:

[WebMethod]

public XmlDataDocument GetPersonAddress(string cityNameID)

{

     //

     // 定義一些變量

     //        

     StringBuilder     myQuery                     = new StringBuilder();

     XmlDataDocument resultXMLDocument = new XmlDataDocument();

     SqlConnection     myConnection            = new SqlConnection();

     SqlCommand            myCommand                 = new SqlCommand();

     SqlDataAdapter    myDA                            = new SqlDataAdapter();

     DataSet                 myDS                            = new DataSet();

     // 根據參數的不同準備不同的查詢語句

     if ((cityNameID != null) && (cityNameID.Trim() != ""))

     {

        myQuery.Append("Select City as City, " +    

                                     "AddressLine1 as Address, " +    

                                     "PostalCode From Address ");

        myQuery.Append("Where City Like '" +    

                                     cityNameID.Trim().Replace("%", "") +    

                                     "%' Order By City");

     }

     else

        myQuery.Append("Select City as City, AddressLine1" +    

                                     " as Address, PostalCode From Address" +    

                                     " Order By City");

     // 得到連接配接字元串并建立到伺服器的連接配接

     myConnection.ConnectionString = ReadSetting("ConnectionString", "");

     myCommand.Connection                    = myConnection;

     myCommand.CommandText                 = myQuery.ToString();

     myCommand.CommandType                 = CommandType.Text;

     myDA.SelectCommand                        = myCommand;

     // 傳回一個DataSet資料

     try

            myDA.Fill(myDS, "Address");

            //

            // 轉換我們的DataSet到XmlDataDocument

            XmlDataDocument temporaryXMLDoc = new XmlDataDocument(myDS);

            resultXMLDocument = temporaryXMLDoc;

            temporaryXMLDoc = null;

        }

        catch

        {

             resultXMLDocument = null;

        finally

             myDS.Dispose();

             myDA.Dispose();

             myCommand.Dispose();

             myConnection.Dispose();

             myQuery = null;

     return resultXMLDocument;

}

最後我們在IIS中釋出這個webservice,因為我們是使用VS2005開發的,如果你的電腦裡還裝了VS2003,那麼你應該檢查一下你的虛拟目錄關聯的服務是否是.net 2.0

使用這個webservice作為資料源建立和部署報表

我們的下一步就是用Microsoft Reporting Services 2005建立一個報表,其使用的資料源就是我們第一步所建立的那個webservice。要完成這個任務,你的電腦裡需要安裝Microsoft SQL Server 2005的Microsoft Reporting Services。我們先建立一個名為“TestReport”的報表伺服器項目。之後,我們添加一個共享資料源,将其類型設定為XML,連接配接字元串就是我們的webservice的位址。然後添加一個新報表,本例中webservice的命名空間是“http://madjarov_d_n_demo.org”,方法是“GetPersonAddress”

圖1

[翻譯]如何使用webservice作為資料源去生成Microsoft Reporting Services 2005的報表

圖2

[翻譯]如何使用webservice作為資料源去生成Microsoft Reporting Services 2005的報表

最後,你選擇下一步并生成報表。這樣報表就可以在SQL Server 2005和VS2005 Studio中設計了,圖例如下:

圖3

[翻譯]如何使用webservice作為資料源去生成Microsoft Reporting Services 2005的報表

我們如何給webservice中的方法GetPersonAddress(string cityNameID)傳參數呢?微軟為開發人員提供了一個強大的報表引擎。我們可在Microsoft Reporting Services 2005中非常容易的設定它。首先我們要在設計模式中選擇報表參數,然後增加一個資料類型為“string”,名為“cityNameID”的參數,圖例如下:

圖4

[翻譯]如何使用webservice作為資料源去生成Microsoft Reporting Services 2005的報表

最後一步就是把這個報表參數和DataSet關聯起來。為了達到這個目的,我們需要在設計模式中編輯資料源,首先建立一個DataSet,參數名為“cityNameID”,它的值為“Parameters!cityNameID.Value”,圖例如下:

圖5

[翻譯]如何使用webservice作為資料源去生成Microsoft Reporting Services 2005的報表

現在我們就可以在報表伺服器中部署報表了。在部署之前你要確定你的“TargetReport Folder”和“TargetReport Server”被設定成了正确的值。你可以在報表屬性中設定它們,圖例如下:

圖6

[翻譯]如何使用webservice作為資料源去生成Microsoft Reporting Services 2005的報表

現在你就可以把它部署到報表伺服器了。

給我們的報表建立一個簡單的視圖

我們最後的任務就是建立一個視圖程式,它負責從報表中擷取結果然後展現給我們。為了在這裡傳送一個參數到報表裡,我們在VS2005(C#)中建立了一個名為“TestReportWebViewer”的web站點,并把“Default.aspx”做我們web站點的預設頁,然後從工具箱裡把“ReportView”控件拖拽到我們的頁上。最後給它設定一個合适的大小并如下圖設定該控件其它的屬性。

圖7

[翻譯]如何使用webservice作為資料源去生成Microsoft Reporting Services 2005的報表

請注意一定要把“ReportPath”和“ReportServerUrl”設定成我們之前部署報表時的相同的值,否則我們的“ReportView”控件将不會顯示我們的報表。下面是“ReportView”控件的“Init”事件的源代碼:

protected void rptViewer_Init(object sender, EventArgs e)

{    

//

// 建立一個報表參數,并初始化它的值為“Al”

//        

ReportParameter cityID     = new ReportParameter();

cityID.Name                            = "cityNameID";

cityID.Values.Add("Al");    

// 設定“ReportView”控件的處理模式為“Remote”

rptViewer.ProcessingMode = ProcessingMode.Remote;

// 傳送參數并初始化“ReportView”控件

rptViewer.ServerReport.SetParameters(new ReportParameter[] { cityID });

最後,謝謝你能看到這裡。希望當你嘗試在Microsoft Reporting Services 2005項目中使用webservice作資料源的時候本文能給你帶來一些幫助。你可以下載下傳本文提供的源碼仔細看其實作的過程。

感謝我的同僚Mr. Svilen Donev給我提供了很多有價值的資訊。

繼續閱讀