<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)
    主站蜘蛛池模板: 乱淫片免费影院观看| 亚洲av日韩综合一区久热| 中文字幕av免费专区| 亚洲国产成人五月综合网| 色妞www精品视频免费看| 免费亚洲视频在线观看| 春暖花开亚洲性无区一区二区| 精品无码国产污污污免费| 亚洲欧美国产欧美色欲| 国产高清免费的视频| 免费无码AV一区二区| 综合亚洲伊人午夜网| 久久免费看少妇高潮V片特黄| 亚洲AV午夜福利精品一区二区| 久久精品中文字幕免费| 亚洲性一级理论片在线观看| 免费看黄视频网站| 日韩欧美亚洲国产精品字幕久久久 | 亚洲伊人久久综合中文成人网| 一个人免费播放在线视频看片| 日韩一卡2卡3卡4卡新区亚洲| 日本一道本不卡免费| 亚洲福利视频网址| 免费鲁丝片一级观看| 一级视频在线免费观看| 亚洲国产精品久久久久| 久久久久久99av无码免费网站| 亚洲国产成人精品无码区花野真一 | 成人奭片免费观看| 国产精品亚洲一区二区三区在线观看| 亚洲av无码国产精品色在线看不卡| 中文字幕手机在线免费看电影| 亚洲一区二区三区首页| 成人毛片免费在线观看| 一区二区三区精品高清视频免费在线播放 | 最近2019免费中文字幕视频三| 亚洲一卡一卡二新区无人区| 久久亚洲国产成人影院网站 | 特级aa**毛片免费观看| 亚洲天堂男人天堂| 国产精品酒店视频免费看|