我完全是 dotnetnuke 和 asp.net 的新手。我需要创建一个易于安装在不同 DNN 站点上的模块包。问题是需要手动添加 SQL 表和其他数据库对象。我希望在部署包时自动添加它们。正如我所说,我对这一切都很陌生,一步一步的解释会很有帮助。
谢谢,
耶莱娜
我完全是 dotnetnuke 和 asp.net 的新手。我需要创建一个易于安装在不同 DNN 站点上的模块包。问题是需要手动添加 SQL 表和其他数据库对象。我希望在部署包时自动添加它们。正如我所说,我对这一切都很陌生,一步一步的解释会很有帮助。
谢谢,
耶莱娜
这由 SqlDataProvider 文件处理。
请注意,当您在 VS2010(或 VS2008)中创建 DotNetNuke 编译模块项目时,您最终会得到三个这样的文件,其中两个是这里关心的(我认为)
请注意,在您的 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 购买的任何其他模块一样安装它。
我的建议是执行以下操作
我使用了这两种资源,发现它们非常有用
好的,我已经度过了这个难关,并想与那些可能仍在苦苦挣扎的人分享。创建包后,您需要将其解压缩并编辑一些文件。查看您的包中的 .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.