OWC使用ASPNET的程序集作数据源
预期读者具备的条件:
1. 会使用ASP.NET(C#)访问数据库
2. 对OWC使用数据库表作为数据源有一定的了解与应用
3. 了解XML语言
步骤:
前提:使用VS.NET 2003 建立一个名称为Demo1的WEB工程项目
1. 建立一个XSLT文件,命名为:Rowset.xlst ,格式如下:
Rowset.xlst:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration = "yes" indent="yes"/>
<xsl:template match="/">
<xml xmlns:s="uuid:BDC6E 3F 0-6DA3-11d1-A 2A 3-00AA 00C 14882"
xmlns:dt="uuid:C 2F 41010-65B3-11d1-A 29F -00AA 00C 14882"
xmlns:rs="urn:schemas-microsoft-com:rowset"
xmlns:z="#RowsetSchema">
<s:Schema id='RowsetSchema'>
<s:ElementType name='row' content='eltOnly' rs:CommandTimeout='30'>
<s:AttributeType name="LastName" rs:number="1" rs:writeunknown="true">
<s:datatype dt:type="string" dt:maxLength="10" rs:maybenull="false" />
</s:AttributeType>
<s:AttributeType name='OrderTotal' rs:number='2' rs:nullable='true'>
<s:datatype dt:type='float' dt:maxLength='8' rs:precision='15' rs:fixedlength='true'/>
</s:AttributeType>
<s:extends type='rs:rowbase'/>
</s:ElementType>
</s:Schema>
<rs:data>
<xsl:for-each select="MyDataset/Table">
<xsl:element name="z:row" namespace="#RowsetSchema">
<xsl:attribute name="LastName">
<xsl:value-of select="LastName"/>
</xsl:attribute>
<xsl:attribute name="OrderTotal">
<xsl:value-of select="OrderTotal"/>
</xsl:attribute>
</xsl:element>
</xsl:for-each>
</rs:data>
</xml>
</xsl:template>
</xsl:stylesheet>
2.建立一个CreateData.aspx页面,其代码如下:
CreateData.aspx:
只留最上面
<%@ Page language="c#" Codebehind="CreateData.aspx.cs"…%>字样的一行
CreateData.aspx.cs
在其Page_Load写如下代码:
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string strConn= "User ID=<username>;Password=<password>;Initial Catalog=Northwind;Data Source=YourSQLServer;";
string sSQL = "SELECT LastName, Sum([UnitPrice]*[Quantity]*(1-[Discount])) AS OrderTotal FROM Employees INNER JOIN (Orders INNER JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID) ON Employees.EmployeeID = Orders.EmployeeID GROUP BY LastName";
//Connect to the data source.
SqlConnection sqlCon=new SqlConnection (strConn);
sqlCon.Open();
//Build a dataSet for Employee Sales.
DataSet ds = new DataSet("MyDataset");
SqlDataAdapter da =new SqlDataAdapter(sSQL,sqlCon);
da.Fill(ds);
//Transform the dataSet using the stylesheet.
XmlDataDocument xmlDoc_ds= new XmlDataDocument(ds);
XslTransform xslTran=new XslTransform();
xslTran.Load(this.Context.Server.MapPath("Rowset.xslt"));
System.Text.StringBuilder t = new System.Text.StringBuilder();
xslTran.Transform(xmlDoc_ds,null,new System.IO.StringWriter(t),null);
string str=t.ToString();
str=str.Replace(">/r/n </z:row>","/>");
Response.ContentType="text/xml";
Response.Write(str);
}
3.建立一个default.htm页面,添加OWC的Chart和PivotTable控件
(1)把Chart的数据源设置为PrivotTable1
(2)设置PrivotTable1的数据源
经过以上步骤,就可以对OWC进行拖拉操作了,以后的操作和OWC使用数据库表作为数据源一样
微软网站上的相关介绍
http://support.microsoft.com/kb/303016/zh-cn?spid=548&sid=500
不过不知道是因为我VS版本的问题还是因为什么,总之了上面网址给出的程序,我在使用的时候只能获得第一条记录,我曾把程序输出的XML文件看了一下,寻找的解决办法如下:
微软网站上的程序输出的格式如下
<z:row …>
</z:row>
把该xml文件作为owc的数据源的时候确实只有第一条记录,而把xml文件格式改成下面的格式:
<z:row …/>
owc就可以显示所有记录,
所以我在该文档中介绍的Demo程序做了稍微的变动,不晓得原因在哪,按理论上这两种输出格式是一样的,若有知道原因的请指点一二啊!呵呵~~
该方法的相关应用:
1.可以隐藏数据库的连接字符串
2.使用Oracle数据库的时候,需要配置Oracle Client,而每台机器都需要配置就达不到B/S结构的优势了
…等等吧!我目前只看到这两个好处,希望有不同见解的朋友能留言给我哦!