难得有一片天

success.aspx?para1="要有决心"+para2="要努力"+para3="要有机会"
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
我们回顾一下上一节的内容:我们已经能够创建一些简单的静态或者动态模板了,下面我们就来学习建立一个数据模板

1.编写一个数据模板


       使用模板生成代码的一个很重要的用途就是数据库模板。通过使用CodeSmith 的SchemaExplorer 组件就能达到这个目的,该数据组件支持SQL以及ADO数据服务。这一节,你将了解到怎么利用SchemaExplorer所提供的信息来生成复杂的T-SQL代码。

2.SQL Server 2005中的HTTP Endpoints


        SQL Server 2005众多新特性中很引人注目的一个就是能通过执行T-SQL代码生成HTTP endpoints。HTTP endpoints有很多用途,但我们最关心的是HTTP endpoints让返回SQL数据到WEB服务更容易了。实际上,如果你在Windows Server 2003上运行SQL Server 2005,你甚至不需要IIS为返回SQL 数据而创建一个web服务。只需要在现有的存储过程上加上CREATE ENDPOINT 就能实现以上目的了。

       虽然包含CREATE ENDPOINT的存储过程可以写得很复杂,但是如果你觉得这个存储过程要多次使用的话,那么完全可以使用代码模板。那么还是用我们之前用过的方法,先来看看你要生成的SQL语句是个什么样子。

3.我们的目标SQL代码


我们将根据一张实际的表创建一个HTTP endpoint ,因为HTTP endpoint 只能从存储过程或者函数返回信息,这就意味着我们必须建立两个SQL语句:一个创建一个存储过程,一个创建endpoint本身;在下面的例子中,我们使用示例数据库:AdventureWorks中的Person.AddressType 表:

CREATE PROC dbo.PersonAddressTypeProc
AS
    SELECT 
        
AddressTypeID, 
         Name
        
rowguid
        
ModifiedDate
     FROM
        
Person.AddressType
GO
>CREATE ENDPOINT Get
AddressType
     STATE = STARTED
AS HTTP
(
     PATH = '/
AddressType',
     AUTHENTICATION = (
INTEGRATED),
     PORTS = (
CLEAR),
     SITE = 'localhost'
)
FOR SOAP
(
     WEBMETHOD '
AddressTypeList'
         (NAME='
AdventureWorks.dbo.PersonAddressTypeProc'),
     BATCHES = DISABLED,
     WSDL = DEFAULT,
     DATABASE = '
AdventureWorks',
     NAMESPACE = 'http://A
dventureWorks/AddressType'
)
GO



我们已经高亮标注了两种不同的信息,红色部分的SQL代码表示用户可以从列表中选择的内容。绿色的部分代表CodeSmith 可以根据用户指定的SQL数据库中的表中获取的内容。剩下的就是静态不变的内容。

接下来我们就利用CodeSmith Studio快速生成一个数据模板。

4.利用CodeSmith Studio创建一个模板


首先启动CodeSmith Studio,然后选择File > New > VB模板,这样将会生成一些样板代码,我们直接修改这些代码如下:

<%@ CodeTemplate Language="VB" TargetLanguage="T-SQL" Description="Create an HTTP Endpoint." %>

TargetLanguage 属性表示你将要生成的代码是 T-SQL语言,这个属性和代码中的静态内容是息息相关的。接下来用我们将要生成的SQL代码替代模板中剩下的样板代码。

<%@ CodeTemplate Language="VB" TargetLanguage="T-SQL" Description="Create an HTTP Endpoint." %>
CREATE PROC dbo.PersonAddressTypeProc
AS
    
SELECT 
        AddressTypeID, 
        Name, 
        rowguid, 
        ModifiedDate
    
FROM
    Person.AddressType
GO
CREATE ENDPOINT GetAddressType
    STATE 
= STARTED
AS HTTP
(
    PATH 
= '/AddressType',
    AUTHENTICATION 
= (INTEGRATED),
    PORTS 
= (CLEAR),
    SITE 
= 'localhost'
)
FOR SOAP
(
    WEBMETHOD 
'AddressTypeList'
        (NAME
='AdventureWorks.dbo.PersonAddressTypeProc'),
    BATCHES 
= DISABLED,
    WSDL 
= DEFAULT,
    
DATABASE = 'AdventureWorks',
    NAMESPACE 
= 'http://AdventureWorks/AddressType'
)
GO

 当然,你需要的不是这样一个静态模板,在下一节我们将加入动态内容