2011-04-30 81 views
4

我是新来的dotnetnuke和asp.net。我需要创建一个易于在不同的DNN站点上安装的模块包。问题是需要手动添加SQL表和其他数据库对象。我希望在部署包时自动添加它们。正如我所说,我对这一切都是陌生的,一步一步的解释将是非常有帮助的。创建一个易于安装sql数据库的dotnetnuke包

感谢,

伊莲娜

回答

4

O.K.我已经了解了这一点,并希望与那些可能还在挣扎的人分享。一旦你创建了一个包,你需要解压缩并编辑一些文件。查看包中的.dnn文件。正如Hamlin指出的那样,您需要添加将执行SQL脚本并创建表,存储过程和其他数据库对象的SCRIPTS(而不是文件)。以下是我添加到dnn文件的代码部分。它被添加到组件标签。

<components> 
    <component type="Script"> 
     <scripts> 
      <basePath>DesktopModules\UserComments</basePath> 
      <script type="Install"> 
      <name>05.02.05.SqlDataProvider</name> 
      <version>05.02.05</version> 
      </script> 

      <script type="uninstall"> 
      <name>uninstall.sqldataprovider</name> 
      <version>05.02.05</version>  
      </script> 
     </scripts> 
    </component> 
     <component type="Module"> 

在那里你需要放入路径,文件类型,文件名和版本。然后您需要创建您在清单中指明的数据提供者文件。我使用{databaseOwner}和{objectQualifier}来确保新的数据库对象符合它们将要安装的服务器。这些区分大小写,所以要小心,否则你会得到错误。这里是我的数据提供程序文件看起来像:

05.02.05.sqldataprovider

ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE {databaseOwner}{objectQualifier}usercomments(
    [moduleid] [int] NULL, 
    [comment] [text] NULL, 
    [date] [datetime] NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 
GO 

create procedure {databaseOwner}sp_viewcomments 
@moduleid int 
AS 
BEGIN 
SET NOCOUNT ON 
    SELECT moduleid, comment, date from {objectQualifier}usercomments where [email protected] 
end 
go 

create PROCEDURE {databaseOwner}sp_usercommentsinsert 
@moduleid int, 
@comment text, 
@commentdate datetime 
AS 
BEGIN 
SET NOCOUNT ON; 
    insert into {databaseOwner}{objectQualifier}usercomments (moduleid, comment, date) values (@moduleid, @comment, @commentdate) 
END 
go 

create PROCEDURE {databasOwner}sp_countcomments 
@moduleid int 
As 
begin 
    SELECT count(*) from {databaseOwner}{objectQualifier}usercomments where [email protected] 
end 
go 

uninstall.sqldataprovider

DROP TABLE  {databaseOwner}{objectQualifier}usercomments 
GO 

drop procedure {databaseOwner}sp_usercommentsinsert 
GO 

drop procedure {databaseOwner}sp_viewcomments 
GO 

drop procedure {databaseOwner}sp_countcomments 
go 

确保sqlconnections适用于新的网站,如果修改在包含连接的文件中是必需的(在我的例子中,我使用了vb ascx.vb和ascx文件)。我使用此代码从web.config文件中提取信息,并使连接适合于任何站点。

VB文件:

Dim cn As New SqlConnection(ConfigurationManager.ConnectionStrings("sitesqlserver").ConnectionString) 

ASCX文件:

ConnectionString="<%$ ConnectionStrings:SiteSqlServer %>" 

然后打包所有包括新的数据提供程序文件到一个zip文件中的文件,你应该是好去。

4

这是通过的SqlDataProvider文件处理。

注意,当你创建VS2010(或VS2008)一个DotNetNuke的编译的模块项目,你结束了三个这样的文件,其中两个是在这里关注的(我认为)

  • 01.00.00 .SqlDataProvider是在模块安装
  • Uninstall.SqlDataProvider是在卸载
  • 在DNN清单文件运行

注意执行的,有指向这些SqqDataProvider文件中的条目:

<file> 
     <name>01.00.00.SqlDataProvider</name> 
    </file> 
    <file> 
     <name>Uninstall.SqlDataProvider</name> 
    </file> 

还要注意,在清单文件,版本号对应前缀上安装SQL文件:

<version>01.00.00</version> 

最后,您将打包DNN模块为.zip文件。确切的结构回避我,但DNNCreative和下面引用的书有很多的信息。

一旦您拥有了可部署的.zip文件,就可以像安装SnowCovered的任何其他模块一样安装它。

我的建议是做自定义模块开发以下

我用这两个资源,发现他们非常有用

+0

以上是我在搞清楚DNN开发过程中所获得的并行知识,但我认为这是对过程的很好总结。我们的模块是特定于客户端的,所以我们不使用sql安装程序文件;但是,当我们开发待售模块时,我肯定会使用它们。 – 2011-04-30 15:32:09

+0

谢谢哈姆林。我会试试这个。正如我所说的,我对这一切都很陌生,我的第一个项目是弄清楚这一点。它可能不像看起来那么难。我会让你知道我得到了多少。 – Jelena 2011-04-30 22:08:28

+0

没问题 - Mitchel卖家的书很好的一步一步地经历着这一切。他在Stackoverflow也是一个很大的贡献者。 – 2011-05-01 01:30:31