4

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

谢谢,

耶莱娜

4

2 回答 2

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 购买的任何其他模块一样安装它。

我的建议是执行以下操作

  • 观看最近的一些关于自定义模块开发的 DNNCreative 培训视频。他们非常详细地解释了这个过程。
  • 阅读 Mitchel Seller 的书:http ://www.amazon.com/Professional-DotNetNuke-Programming-Mitchel-Sellers/dp/0470171162——它解释了对 SQL 脚本/清单的所有有趣调整,以支持模块的多个版本

我使用了这两种资源,发现它们非常有用

于 2011-04-30T15:28:27.717 回答
4

好的,我已经度过了这个难关,并想与那些可能仍在苦苦挣扎的人分享。创建包后,您需要将其解压缩并编辑一些文件。查看您的包中的 .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   moduleid=@moduleid
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 moduleid=@moduleid
end
go

卸载.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 fle 中)。我使用此代码从 web.config 文件中提取信息并使连接适用于任何站点。

vb 文件:

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

ascx 文件:

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

Then package all the files including the new dataprovider files into a zip file and you should be good to go.

于 2011-05-05T21:14:47.310 回答