<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    blog.Toby

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      130 隨筆 :: 2 文章 :: 150 評論 :: 0 Trackbacks
    MOSS的Excel Services相信大家都聽說過.我們可以創建一個引用了外部數據的Excel文件,然后發布到Excel Services中,然后就可以讓用戶在網頁上看到數據庫中的數據的實時的狀態.

    我們會有這樣的設想,我在Excel中設計一個計算邏輯,然后從數據庫中取一些值出來,填到Excel中,然后讓Excel 自動去計算,然后我們可以把計算分析后的結果呈現給擁護.恩,這個設想很好!我們要實現這個想法需要做三件事情:

    1)我們要能從數據庫中取出特定的數,可能需要取到某一個數
    2)我們需要Excel Services能支持我們直接查數據庫
    3)我們把設計好的Excel發布出去

    第一件事情我們自然想到了SQL語句比如"Select value  From table..."之類.
    很遺憾,Excel Services不支持直接查詢數據庫,只支持SQL Server Analysis Services等間接的方式,可能是處于安全或者其他考慮,對于不了解SQL Server Analysis Services的兄弟來說就很難了  : (

    這么一個好的設想,難道就實現不了嗎?慶幸的是,Excel Services支持Udf用戶自定義函數,我們可以通過用戶自定義函數開發一個直接查數據庫的Udf,使用我們熟悉的SQL語句.

    Udf的開發過程:
    1)VS2005新建一個類工程,應用經典目錄下 12/ISAPI/Microsoft.Office.Excel.Server.Udf.dll
    2)編寫自定義的函數
    3)注冊Udf

    關于Udf中的支持的返回值類型等可以參考: http://officeblogs.net/excel/UDFs%20for%20Excel%20client%20and%20server.doc

    SQLExcuteUdf是為實現了一個方法取數據庫中的某個值而設計的:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using Microsoft.Office.Excel.Server.Udf;
    using System.Data.SqlClient;

    namespace SQLExcuteUdf
    {
        [UdfClass]
        
    public class SQLExcute
        
    {
            
    /// <summary>
            
    /// 取SQL Server數據庫中的單個值
            
    /// </summary>
            
    /// <param name="constr">數據庫鏈接</param>
            
    /// <param name="comstr">SQl語句</param>
            
    /// <returns></returns>

            [UdfMethod]
            
    public string GetSingleDataFromSQL(string constr, string comstr)
            
    {
                
    try 
                
    {
                    
    string tempstring = "無數據";
                    SqlConnection mycon 
    = new SqlConnection(constr);
                    mycon.Open();
                    SqlCommand mycom 
    = new SqlCommand(comstr, mycon);
                    SqlDataReader myreader 
    = mycom.ExecuteReader();
                    
    if (myreader.Read())
                    
    {
                        tempstring 
    = myreader[0].ToString();
                    }

                    mycon.Close();
                    mycon.Dispose();
                    
    return tempstring;
                }

                
    catch (Exception ex)
                
    {
                    
    return "運行錯誤,錯誤:"+ex.Message;
                }

            }

        }

    }

    編譯把dll進行注冊

    根據Udf的設計,需要給函數提供一個數據庫連接和SQL語句,在Excel中我是需要用這個Udf查數據庫中某個值,直接在某個單元格輸入函數"=GetSingleDataFromSQL($A$1,B4)".因為Excel不知道這個函數所以在這里會顯示"#Name!"之類的東西,如果把Udf作成xll放到Excel中就能直接在Excel中用了,這里就不做介紹了. 

    然后,我把這個發布到Excel Services中.
    當我在瀏覽器中訪問的時候,Excel Services就會利用Udf去數據庫中查到一個值,顯示出來,當數據庫中數據有更新的時候,刷新頁面會實時更新數據.


    這里下載源代碼.

    預告:
    如何利用Excel Services取實數據作為KPI列表數據源
    posted on 2009-03-04 21:25 渠上月 閱讀(404) 評論(0)  編輯  收藏 所屬分類: sql (sqlServer)
    主站蜘蛛池模板: 一区二区免费国产在线观看 | 成人免费毛片内射美女-百度| 7723日本高清完整版免费| 大地资源免费更新在线播放| 亚洲?V乱码久久精品蜜桃| 亚洲香蕉成人AV网站在线观看| 91亚洲va在线天线va天堂va国产| 亚洲中文无码a∨在线观看| 亚洲视频在线免费播放| 69视频免费观看l| 免费a级毛片视频| 亚洲精品视频观看| xxxxx做受大片在线观看免费| 亚洲一区在线免费观看| 国产亚洲精品免费视频播放| 亚洲国产成人久久| 成年女人免费碰碰视频| 亚洲国产精品久久久久久| 男女超爽视频免费播放| 2015日韩永久免费视频播放| 中文字幕亚洲一区| 国产综合成人亚洲区| 亚洲美女在线国产| 久久精品国产亚洲av天美18| 美女视频黄a视频全免费| 亚洲AV无码一区二区乱孑伦AS| 色综合久久精品亚洲国产| 思思re热免费精品视频66| 亚洲精品无码久久久久秋霞 | 中文字幕在线观看免费视频| 亚洲一区欧洲一区| 1000部啪啪毛片免费看| 亚洲一区二区三区成人网站| 免费观看AV片在线播放| 国内成人精品亚洲日本语音 | 亚洲日韩亚洲另类激情文学| 亚洲毛片网址在线观看中文字幕| 日韩精品久久久久久免费| 亚洲无av在线中文字幕| 又粗又大又黑又长的免费视频| 免费无遮挡无遮羞在线看|