MOSS-Excel Services-Udf(用户自定义函数)-SQLExcuteUdf 查询sql server数据的用户自定义函数
2006-10-29 21:00
330 查看
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进行注册
![](https://oscdn.geek-share.com/Uploads/Images/Content/200610/121c7ecef6eb825e1ff7ca8dbc2e0ffa.png)
根据Udf的设计,需要给函数提供一个数据库连接和SQL语句,在Excel中我是需要用这个Udf查数据库中某个值,直接在某个单元格输入函数"=GetSingleDataFromSQL($A$1,B4)".因为Excel不知道这个函数所以在这里会显示"#Name!"之类的东西,如果把Udf作成xll放到Excel中就能直接在Excel中用了,这里就不做介绍了.
![](https://oscdn.geek-share.com/Uploads/Images/Content/200610/15a526376f99d5aa90d96a55ed0e7b7b.png)
然后,我把这个发布到Excel Services中.
当我在浏览器中访问的时候,Excel Services就会利用Udf去数据库中查到一个值,显示出来,当数据库中数据有更新的时候,刷新页面会实时更新数据.
![](https://oscdn.geek-share.com/Uploads/Images/Content/200610/695f9408b624288061dd92ec44a0f058.png)
在这里下载源代码.
预告:
如何利用Excel Services取实数据作为KPI列表数据源
我们会有这样的设想,我在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进行注册
![](https://oscdn.geek-share.com/Uploads/Images/Content/200610/121c7ecef6eb825e1ff7ca8dbc2e0ffa.png)
根据Udf的设计,需要给函数提供一个数据库连接和SQL语句,在Excel中我是需要用这个Udf查数据库中某个值,直接在某个单元格输入函数"=GetSingleDataFromSQL($A$1,B4)".因为Excel不知道这个函数所以在这里会显示"#Name!"之类的东西,如果把Udf作成xll放到Excel中就能直接在Excel中用了,这里就不做介绍了.
![](https://oscdn.geek-share.com/Uploads/Images/Content/200610/15a526376f99d5aa90d96a55ed0e7b7b.png)
然后,我把这个发布到Excel Services中.
当我在浏览器中访问的时候,Excel Services就会利用Udf去数据库中查到一个值,显示出来,当数据库中数据有更新的时候,刷新页面会实时更新数据.
![](https://oscdn.geek-share.com/Uploads/Images/Content/200610/695f9408b624288061dd92ec44a0f058.png)
在这里下载源代码.
预告:
如何利用Excel Services取实数据作为KPI列表数据源
相关文章推荐
- 求日期所属星座的 T-SQL UDF (用户自定义函数)
- 【SQL Server数据迁移】64位的机器:SQL Server中查询ORACLE的数据
- 求日期所属星座的T-SQLUDF(用户自定义函数)
- SQL Server UDF用户自定义函数
- sql复杂查询:A表与B表一对多,查询A表所有用户对应B表中的数据,去除B表中的日期最大值
- 求日期所属星座的 T-SQL UDF (用户自定义函数)
- Spark SQL 用户自定义函数UDF、用户自定义聚合函数UDAF 教程(Java踩坑教学版)
- 查询所有SQL用户的连接信息(可显示IP)\SQL Server中强制关闭数据库连接
- SQL Server 系统表使用-查询指定数据库中用户表及其列、数据类、长度
- sql server 2008学习11 UDF用户自定义函数
- 获取sql server数据库中所有用户表名及在sql server中怎样用sql得到库中所有的表名以及表的结构(列名和数据类型)
- SQL Server 关于 Table 字典数据的查询SQL
- 查询数据库里当前用户下的所有表的总共数据sql
- 步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数、在不同的DataContext之间做更新、缓存、获取信息、数据加载选项和延迟加载
- sql server的sql查询包的数据格式
- SQL SERVER中查询当天、当月、当年数据的SQL语句
- 关于SQL Server SQL语句查询分页数据的解决方案
- 在数据表中用sql实现累计计算查询(sql server 2000)
- SQl中的UDF(用户自定义函数)与存储过程的区别、优点
- Sql Server中查询当天,最近三天,本周,本月,最近一个月,本季度的数据的sql语句