做人要厚道

出来混,总是要还的,做人要厚道

Search

 
 

与我联系

  • 发短消息

搜索

 

常用链接

  • 我的随笔
  • 我的空间
  • 我的短信
  • 我的评论
  • 更多链接
  • 我的参与
  • 我的新闻
  • 最新评论
  • 我的标签

留言簿(5)

  • 给我留言
  • 查看留言

我参加的小组

  • DotNetNuke

我参与的团队

  • DNN团队博客(0/325)

随笔分类

  • DotNetNuke(4) (rss)
  • 思考(1) (rss)

随笔档案

  • 2007年5月 (1)
  • 2005年1月 (2)
  • 2004年12月 (2)
  • 2004年11月 (2)
  • 2004年9月 (1)
  • 2004年8月 (2)

文章分类

  • DNN(1) (rss)
  • Web Host(4) (rss)

DotNet学习

国外BLOG

  • DNN'er category
  • pluralsight
  • psantry

最新评论

阅读排行榜

  • 1. 岂敢独享:如何将2M的hotmail升级到25M !(2518)
  • 2. DotNetNuke中理解{objectQualifier} {databaseOwner}(2331)
  • 3. DotNetNuke升级指南(2192)
  • 4. 学习Dnn心得(2133)
  • 5. Blog\Wiki杂谈(2010)

评论排行榜

  • 1. 岂敢独享:如何将2M的hotmail升级到25M !(15)
  • 2. DotNetNuke中理解{objectQualifier} {databaseOwner}(13)
  • 3. Blog\Wiki杂谈(8)
  • 4. DotNetNuke升级指南(7)
  • 5. 学习Dnn心得(4)

Powered by: 博客园
模板提供:沪江博客
博客园 | 首页 | 发新随笔 | 发新文章 | 联系 | 订阅订阅 | 管理

2007年5月26日

不错
     摘要: 顶端  阅读全文
posted @ 2007-05-26 15:33 做人要厚道 阅读(44) | 评论 (0) | 编辑
 

2005年1月21日

Blog\Wiki杂谈

        严正声明:本博客中的任何随笔、文章、图片等内容都不能私自转载,必须书面征得作者同意才能转载,并不能随意篡改,如要作出任何改动,必须书面征得作者同意方可,作者拥有一切权利并保留一切追究权利! 
        这两天很无聊,自己看了看一些wiki程序,主要关注wiki程序的使用上边了,然后申请了一个qq群的wiki qq.swiki.net ,等我快把里边的内容完成的时候,发现居然有一个qq群查找网站,寒一个!早知道就不折腾了.
        Blog现在的红火,大家都能看到,如果你用搜索引擎,搜索技术文章,至少有1/3的链接里边包括了blog,blog取代论坛走红的原因是在网络上让每个人有一个属于自己的空间,让大家找到了归属感.每个人都是管理员.如果大家仔细研究Blog,就会发现在技术Blog的个人链接里边,都是自己感兴趣的他人Blog,这就形成了一个网络,类似于蜘蛛网,处在核心圈子里边的一些技术大牛,他们相互之间交换连接,形成了一个技术圈子;在他们外层,可能是技术稍逊色一点的一些技术blog,他们相互连接,但是在他们的连接里同时包括了上层的一些连接,依次类推,行成了一个蜘蛛网,技术就这样从中间蔓延开来;错综复杂的关系当中,我想还是有一些必然的.
        根据马斯洛需求理论把需求分成生理需求、安全需求、社交需求、尊重需求和自我实现需求五类,依次由较低层次到较高层次,我们可以对比一下技术的发展史,论坛满足了我们的安全需求和社交需求;而Blog技术实现了我们的尊重需求,我们写Blog技术帖子,一方面是为了把平时工作的一些经验做一个备份;同时也实现了我们的"尊重需求",其实Blog实现社交需求已经退而其次了,更多的是让我们的技术blog得到别人的认可和赏识,满足我们的尊重需求.当然我们也想利用Blog实现我们的社交需求,在blog的连接里边,你的朋友连接就满足了你的社交需求;个人认为Blog还是不能满足我们的社交需求,比如关注某一项技术,你可能不能直接找到相关的Blog连接,你将通过别人blog里边的连接继续搜索,一直往上找,直到你找到了一个技术大牛.Blog怎样满足我们的社交需求,让我们归属于某个团队,某个组织?或许是Blog发展的一个方向或者是Blog搜索的一个方向.大家都在说博客园的团队功能很吸引人,为什么?因为这个团队功能满足了我们的社交需求.
        Blog技术满足了我们的尊重需求,国外轰轰烈烈的开源运动呢,它满足了我们的自我实现需求,开源代码给社会带来的进步很多,给个人带来的更多是自我实现需求.国外的开源项目能够如火如荼地进行,而国内相对落后,偶然中有必然,国外的经济水平已经到了一定的水平,和国内的软件开发不一样,他们的工作已经满足了个人的安全需求.(这里的安全需求不仅仅是人身安全,就我理解,就是我们的小康水平)而国内的程序开发呢?更多地是满足我们的安全需求.哪儿能够去满足其他需求呢?因为需求是有层次的,从低到高,只有先满足低级,才能满足高级需求.幸运地是,我们看到了希望,国内的开源技术已经迈出了一大步.有很多项目可以加入,但是差距还是有的,看看国外几个大型地开源网站,就知道差距了.
        既然Blog技术现在这么热,为什么没有推出相关的搜索引擎呢?如果对技术Blog按照它的使用价值来划分,根据它被连接的次数,以及被连接Blog的技术水平档次,来确定技术Blog的价值不就方便多了;现在有一些Blog搜索,但是更多是在自己网站内部进行搜索,效果不是很理想;也有一些收集blog的地方,比如心得集,但收集的连接相对较少,毕竟Blog每天在以惊人的速度诞生.不过Blog搜索很可能会成为搜索技术的下一块蛋糕,或许是里边不存在商业价值,所以搜索引擎没有实现.
        Wiki技术带来的就不一样了,至少不象Blog带给我们地震动那么大.但是它也有自己的发展前途.Wiki更多地是关注知识管理,并且是共享知识管理,需要很多人去参与和完善.众多的Blog,怎么分成不同的条目,或许这就是Wiki的一个方向了,但Wiki需要人们去手动完善,而搜索却可以自动发现,通过一定的算法来分类;如果有一天,wiki发展地很全面,它可以分组不同地条目,在某个技术方面,它会取代搜索引擎吗?如果你想了解Wiki技术及代码,请参考http://zh.wikipedia.org/wiki/Wiki%E5%BC%95%E6%93%8E
  上边提到了马斯洛需求理论,可能你说我八股,硬往这上边强加,但是从我个人认为是这样的.所以欢迎大家尽情拍砖.马斯洛需求理论包括了5个层次,不知道将来还有没有扩展,因为开源技术满足了最高级别的需求,来技术发展的下一步是什么呢?人类更高的需求是什么呢?技术还能满足我们地什么需求?大家开始拍砖吧!

posted @ 2005-01-21 08:31 做人要厚道 阅读(2010) | 评论 (8) | 编辑
 

2005年1月19日

岂敢独享:如何将2M的hotmail升级到25M !
  • First go to your Hotmail account and log in.
  • Then go to the settings (Options) of your account and click on "My Profile".
  • You need the adjust the country to United States and the state to Florida (postal code 33332). (it could be that other states also work)
  • Then go to http://memberservices.passport.net/memberservice.srf?lc%2043.
  • Click on the link to terminate your .NET passport. Then you need to click on the button the contact Hotmail and click on "close my account".
  • Close Internet Explorer and go to hotmail.com and log in again.
  • Normally you should have a 25MB account now. Soon it will be upgraded to 250MB!

         从网上看来的一个方法,我也成功了 )

  • 郑重声明: 本帖只代表我(做人要厚道)本人成功升级,对于在升级过程中可能带来的停止用户服务以及由此带来的其他任何影响,本人概不负责任.

  •  

  •  
















    posted @ 2005-01-19 00:08 做人要厚道 阅读(2518) | 评论 (15) | 编辑
     

    2004年12月12日

    DotNetNuke升级指南
    DotNetNuke升级指南:
    很多人关心dnn升级的问题,不能确定升级是否能够成功,经测试,我将升级的测试结果告诉大家,
    主要包括两类情况:
    1、从DNN2升级到DNN3,dnn2为师域汉化版,升级到dnn3.04师域汉化版;
    条件:dnn2能正常使用,并且dnn2为sql server数据库。
    结果:此情况下dnn2的系统模块(除Documents模块)能够正常升级到dnn3.所有的皮肤和容器在
    dnn3下能正常使用。而自定义的dnn2模块在升级后,将会出现异常。
    方法:将dnn3的源文件(切记:dnn3源代码为官方非汉化版本)直接覆盖dnn2源文件目录,同时
    修改web.config为dnn2安装所使用的数据库。此时dnn3英文版即可正常使用。如果要使用师域汉化
    版,应下载师域汉化包DotNetNuke_3[1].0.4-CN-package.zip,并将该包内文件解压至dnn目录下,
    并再次修改web.config为dnn2安装所使用的数据库。(即所有使用的数据库配置文件应该保持一致,
    始终为dnn2的数据库配置文件)。此时设置site settings,选择默认语言为中文,即可使用汉化版。
    异常分析:
    1)dnn2自定义模块不能在dnn3下使用,是因为dnn3的模块命名空间发生变化了,大家可以参考官方文档。
    2)Documents模块在升级到dnn3后,能看到所有上传的文件,但不能下载这些文件。Documents中
    URL字段以前存放的文件名,例如Blue.zip;而在dnn3中,存放格式为FileID=6,具体实现情况大
    家可以分析一下源代码。
    补充:
    1)如果从dnn2直接升级到dnn3.07,参照上面说明,直接利用dnn3.07源文件而不用dnn3.04,能达到同样效果。
    2)正常升级到3.04汉化版本后,想将dnn3.04升级至最新的3.07,可参照下边内容2。Documents模块
    仍不能正常下载。
    2、DNN3.04升级到DNN3.07.方法类似,直接将DNN3.07源文件覆盖DNN3.04,同时修改web.config
    为DNN3.04使用的数据库。所有dnn3的模块、皮肤、容器都能正常使用。并且此时Documents模块
    也可以正常下载。
    posted @ 2004-12-12 13:40 做人要厚道 阅读(2192) | 评论 (7) | 编辑
     

    2004年12月9日

    DotNetNuke自带的一个文档DotNetNuke_ClientAPI-MaxMin的翻译

    介绍
    DNN的客户端API给开发者提供一个胖客户端的功能集。本文档只是这些功能集中的概要;不依靠 postbacks,能够提供模块的最大化\最小化处理.

    目标
    交流并且给出关于创建胖客户端功能集步骤的文档。
    为最大化/最小化特点内部运转提供一个更好的理解。

    显示/隐藏模块的内容
    在支持 DHTML 的浏览器中,显示和隐藏模块内容的工作是相当容易的.,如果要决定是否显示或隐藏内容,只需简单地设置style.display里边的属性为空或不设置style.display的属性.触发最大化(显示)/最小化(隐藏)的事件是通过点击"最大化"和"最小化"的一个图片.最后,模块通过利用该模块一个唯一的cookie来保存模块的状态(即模块内容是显示还是隐藏).

    处理单击事件
    Visibility.ascx 用户控件负责处理显示/隐藏模块内容.该模块的工作主要是检查cookie的值,来决定显示或隐藏内容,同时正确设置最大化/最小化的图片.

    这种增加,通过如下的代码,使得先检查浏览器是否支持DHTML:
    If ClientAPI.BrowserSupportsFunctionality(ClientAPI.ClientFunctionality.DHTML) Then
    如果返回为true,则继续下一步:

    通常设置内容显示为true
    因为在客户端我们通常需要显示模块的内容

    如果内容不需要显示,设置内容展示的样式为空

    注册命名空间为dnn.dom的客户端API
    ClientAPI.RegisterClientReference(Page, ClientAPI.ClientNamespaceReferences.dnn_dom)

    增加客户端image 单击事件
    通过如下的代码设置事件处理
    cmdVisibility.Attributes.Add("onclick", "if (__dnn_ModuleMaxMin_OnClick(this, '" & _ pnlModuleContent.ClientID & "')) return false;")

    Postback代码运行前,这将导致事件的执行。如果返回false,则Postback不再执行,如果max/min正确执行了,我们不再需要返回一个Postback执行,这正是我们想要的答案。相反,如果没有成功执行,则求助于可信赖的postback事件处理。

    设置一个代表模块id的button自定义属性,即cookie值
    因为客户端负责设置维护模块内容为显示/隐藏状态的cookie。我们需要知道模块的id以正确设置关于模块的cookie。

    记录2个关于显示/隐藏图片位置的客户端变量
    一个模块可以包括一系列最大化/最小化按纽的图片。因为客户端负责我们所需要的图片的转换,通过方法ClientAPI.RegisterClientVariable这些信息被传递到客户端,在客户端,取得这些变量的值是通过dnn.getVar方法。

    用户登陆回车事件
    在新的版本中,修改了用户登陆模块。当用户按“回车”时,最大化/最小化按牛将显示。最大化/最小化按纽接受登陆时间。因为最大化/最小化按纽是ImageButton,其HTML表现形式为<INPUT TYPE=”image”.通过HTML说明,这些元素和submit按纽执行同样的操作。因此,可以从回车键中接受动作行为。我的工作就是围绕将
    Visibility按纽从ImageButtons转化为一个图片与LinkButton的组合展开的。
    Introduction
    Utilizing the DotNetNuke Client API enables the developer to offer a rich client-side feature-set.  This document outlines one of those feature-sets; providing the ability to maximize and minimize modules without using postbacks.
    Goals
    Communicate and document the steps involved in creating rich client-side feature-set.

    Provide a better understanding of the inner-workings of the Max/Min feature-set.
    Showing and Hiding Module Content
    The task of showing and hiding content in a browser that supports DHTML is rather simple.  Simply get a reference to the element and access its style.display property and set it to none or empty-string depending on whether you wish to show or hide the element.  The event that triggers this action is clicking on an image with a plus to maximize  (show) content and clicking on a minus image to minimize (hide) the content.  Finally, the way the module remembers its state (whether it was maximized or minimized) is by using a cookie unique to the module.

    Handing the Click Event
    The functionality behind the showing and hiding of modules is found in the Visibility.ascx UserControl.  The control’s job was to check for a cookie to determine if it should show or hide content and set the appropriate image (plus/minus, or custom).  Additionally, it set the visibility of the content.

    This enhancement first performs a check to see if the browser supports basic DHTML by the following code.

    If ClientAPI.BrowserSupportsFunctionality(ClientAPI.ClientFunctionality.DHTML) Then

    If this returns True then we do the following

    Always set the content visibility to True
    Since the content needs to be available on the client side we always need it to be rendered.

    When content is supposed to be hidden set the content’s display style to none

    Register the Client API for the dnn.dom namespace
    ClientAPI.RegisterClientReference(Page, ClientAPI.ClientNamespaceReferences.dnn_dom)

    Add a client-side onclick handler to the image
    Setting an event handler via code like this
    cmdVisibility.Attributes.Add("onclick", "if (__dnn_ModuleMaxMin_OnClick(this, '" & _ pnlModuleContent.ClientID & "')) return false;")

    This will cause this event to fire before the postback code is run.  If we return false, then the postback code will never run.  This is exactly what we want, if the max/min script succeeds we do not want a postback to occur, however, if it fails we will fall back on the reliable postback handling.

    Set a custom attribute on the button to denote the module id
    Since the client-side will be responsible for setting the cookie to maintain the module’s max/min state, we need to know the module’s id in order to set the correct cookie. 


    Register 2 client-side variables for the max and min image locations
    A module can have a custom set of images assigned to its max and min button.  Since the client is responsible for switching the image when clicked we need to know what image to use.  This information is passed down to the client by using the ClientAPI.RegisterClientVariable method.  On the client-side it is retrieved with the dnn.getVar method.

    Fixing the Enter Key for Account Login

    This enhancement also fixed the issue we were having for the Account Login module.  When the user pressed the enter key and the max/min button was shown, the max/min button would receive the action instead of the login button.  This is because the Max/Min button used to be of type ImageButton, which would render the HTML <INPUT TYPE=”image”.  According to the HTML spec, this element acts in the same way as a submit button.  Thus, it would receive the action for the Enter key.  I have worked around this issue by converting the Visibility buttons from ImageButtons to a combination of an Image and a LinkButton.

    posted @ 2004-12-09 08:57 做人要厚道 阅读(1145) | 评论 (1) | 编辑
     

    2004年11月30日

    DotNetNuke中理解{objectQualifier} {databaseOwner}
     

    在DotNetNuke3.0中,如果我们用英文版安装的时候,在数据库中我们可以看到大部分表都有一个前缀“_DNN”。为什么要设置这个前缀呢,是因为利用objectqualifier(表现为前缀),可以允许在同一个数据库中建立多个主机。在每个存储过程和表中都指定了objectqualifier。例如,你可以设置一个主机利用 'DNN1'作为前缀,同时设置另一个主机的前缀为'DNN2'。通过这种方式,可以在同一个数据库中生成两个用户表,其结构一致,功能一致,但是一个表名为“DNN1_Portals”,另一个表名为“DNN2_Portals”。这两个表且能够在同一个数据库并行运行,而不相互影响。

    在什么地方设置表安装时候的前缀呢?在DNN3.0 web.config(第273行)中,我们可以看看

        <data defaultProvider="SqlDataProvider">

            <providers>

                <clear />

                <add name="SqlDataProvider"

                    type="DotNetNuke.Data.SqlDataProvider, DotNetNuke.SqlDataProvider"

                    connectionStringName="SiteSqlServer"

                    upgradeConnectionString=""

                    providerPath="~\Providers\DataProviders\SqlDataProvider\"

                    objectQualifier="DNN"

                    databaseOwner="dbo" />

            </providers>

        </data>

    在这个xml节中,objectQualifier="DNN"设置了前缀,所有的表和存储过程,就加上了这个相应地前缀。上边的实例中,只不过在这里设置了两个不同的前缀而已,一个为"DNN1",一个为"DNN2"罢了。

    接下来,我们先看看在创建表和存储过程的SQL脚本中,其具体实现。

    CREATE TABLE {databaseOwner}{objectQualifier}PortalAlias (

        [PortalAliasID] [int] IDENTITY (1, 1) NOT NULL ,

        [PortalID] [int] NOT NULL ,

        [HTTPAlias] [varchar] (200)

    ) ON [PRIMARY]

    GO

     

    CREATE procedure {databaseOwner}{objectQualifier}GetPortalByAlias

    @HTTPAlias nvarchar(200)

    可以看到在表和存储过程中,都需要加上 {databaseOwner}{objectQualifier}这个前缀。我们可以在存储过程中看到这样一个存储过程“DNN_GetPortalByAlias”。那么我们在实际使用这样一个带前缀的存储过程的时候,如何保证正确使用存储过程呢?

    在具体的应用中,我们在vb代码中利用DatabaseOwner and ObjectQualifier来保证我们正确的使用这些存储过程。下边看一个对该存储过程使用的实例:

        Public Overrides Function GetPortalByAlias(ByVal PortalAlias As String) As IDataReader

    Return CType(SqlHelper.ExecuteReader(ConnectionString, DatabaseOwner & ObjectQualifier & "GetPortalByAlias", PortalAlias), IDataReader)

          该语句实现利用MS的数据访问块之方法SqlHelper.ExecuteReader,在使用该方法中,常规方式中我们所传入的参数中存储过程名 "GetPortalByAlias",加了前缀后,我们所传入的参数中存储过程名

    DatabaseOwner & ObjectQualifier & "GetPortalByAlias" ,这里的DatabaseOwner和ObjectQualifier 是在类中的定义好的两个属性

            Public ReadOnly Property ObjectQualifier() As String

                Get

                    Return _objectQualifier

                End Get

            End Property

     

            Public ReadOnly Property DatabaseOwner() As String

                Get

                    Return _databaseOwner

                End Get

            End Property

    通过这两个属性,得到web.config中已定义好的objectQualifier="DNN" 和databaseOwner="dbo" ,也就是得到了定义好的前缀"DNN"和"dbo" 。关于在属性实现中,如何得到_objectQualifier和_databaseOwner这些配置信息呢?是通过以下方法来实现的

     Public Class SqlDataProvider

            Inherits DataProvider

            Private Const ProviderType As String = "data"

        '读取data配置节信息

            Private _providerConfiguration As ProviderConfiguration = ProviderConfiguration.GetProviderConfiguration(ProviderType)

            Private _connectionString As String

            Private _providerPath As String

            Private _objectQualifier As String

            Private _databaseOwner As String

            Private _upgradeConnectionString As String

     

            Public Sub New()

                '读取DefaultProvider配置节信息

                Dim objProvider As Provider = CType(_providerConfiguration.Providers(_providerConfiguration.DefaultProvider), Provider)

     

                ' 读取Provider的属性
                If objProvider.Attributes("connectionStringName") <> "" AndAlso _

                System.Configuration.ConfigurationSettings.AppSettings(objProvider.Attributes("connectionStringName")) <> "" Then

                    _connectionString = System.Configuration.ConfigurationSettings.AppSettings(objProvider.Attributes("connectionStringName"))

                Else

                    _connectionString = objProvider.Attributes("connectionString")

                End If

     

     

                _providerPath = objProvider.Attributes("providerPath")

     

                _objectQualifier = objProvider.Attributes("objectQualifier")

       '依次读取,并得到配置节点objectQualifier,

                If _objectQualifier <> "" And _objectQualifier.EndsWith("_") = False Then

                    _objectQualifier += "_"

                End If

     

                _databaseOwner = objProvider.Attributes("databaseOwner")

                If _databaseOwner <> "" And _databaseOwner.EndsWith(".") = False Then

                    _databaseOwner += "."

                End If

     

                If Convert.ToString(objProvider.Attributes("upgradeConnectionString")) <> "" Then

                    _upgradeConnectionString = objProvider.Attributes("upgradeConnectionString")

                Else

                    _upgradeConnectionString = _connectionString

                End If

            End Sub

     

    It’s that simple!

     

    原文:http://bring2mind.dnsalias.net/Default.aspx?tabid=93

     

     

     

    posted @ 2004-11-30 19:03 做人要厚道 阅读(2331) | 评论 (13) | 编辑
     

    2004年11月23日

    DotNetNuke3模块汉化的一些Bug

    主要是体验一下里边的模块,发现了一些bug.有的错误可能是我理解有错误,请大家指正:
    使用的版本是DNN3英文+师域汉化包(20041123上传的)



    1、新事件中11/23/2004无效开始日期! 
       解决方法:如果是中文,能不能在生成日期的时候就按照中文的格式,因为设置日历控件的输出参数
        本地化以后时间是否格式为2004-12-23,它的格式为12/23/2004

    2、点聚合后,可不可以取消聚合?

    3、连接设置--列表格式--翻译错误

    4、yes,no 是,否?

    5、删除模块提示“Are you sure you wish to delete this module”,未汉化!

    6、文档下载功能无法实现,报错“Error: Documents is currently unavailable.”

    7、事件设置里边,时间跳过以后,时间是否改为替换的文本?

    8、FAQs的翻译有问题:“问”和“答”翻译顺序反了

    9、严重错误:Search Input模块添加,报错:A critical error has occurred.未将对象引用设置到对象的实例。
    如果此时再增加模块,如Text/HTML,此时该模块也不能正常使用;相反,如Text/HTML,此时该模块
    能正常使用;再添加Search Input模块,报错:A critical error has occurred.未将对象引用设置到对象的实例

     

    以下可能为原系统的bug:
    1、通讯录里边的角色是不是可以选择下拉?

    2、编辑讨论组,不能修改和删除吗?

    3、当选择了一个时间,重选时间,报错:script error

    4、编辑浮动框架Edit IFrame,源文件不能选择

    5、User Defined Table,增加新行,无结果

    posted @ 2004-11-23 12:46 做人要厚道 阅读(1138) | 评论 (1) | 编辑
     

    2004年9月20日

    学习Dnn心得
    其实也谈不上学习,因为我对vb不怎么了解,郁闷!觉得DNN最好的地方就是它可以添加moudle,tab,portal.最重要的地方当然是它的模块加入了,因为模块的作用就是完成一个功能.最开始我被系统自带的模块和自定义的Tab给迷惑了,比如Admin下边的一个Tab,叫做Site Log,当我点这个Tab的时候,发现在这个Tab里边包括了一个东西也叫Site Log,怎么都理解不了是怎么实现的,后来一看数据库里边的内容,其实这个也叫Site Log的东西,不过是系统加入的一个Site Log Moudle而已.
           到现在主要看了一下User  Account模块,发现它的管理上对于address用户控件实现了对一些内容是否为必添项由管理员控制,其实结构不是很麻烦,但由于我们是逆向研究代码,探究其实现,所以感觉很乱!
    在这个系统中,大量用到类似这样的代码
    DataProvider.Instance().UpdateModuleSetting(ModuleId, SettingName, SettingValue)
    和SqlHelper.ExecuteNonQuery(ConnectionString, DatabaseOwner & ObjectQualifier & "UpdateModuleSetting", ModuleId, SettingName, SettingValue)
    就我的理解,是叫做所谓Provider(提供者)/Factory(工厂)模式,目的就是可以实现对不同数据库的支持,好处应该是当要对系统进行扩展,比如要加入一个对oracle数据库的支持只需要再实现一个类似SqlHelper.ExecuteNonQuery这样的东西,也就是说满足开放/闭合原则.对于整个系统还采用到什么模式,我也不太清楚,高手指点.对于UpdateModuleSetting这样的类名,在数据库中有同样的名字UpdateModuleSetting这样的存储过程,所以学习这些类的关系时,通过存储过程就能学习个大概.大家有什么好的学习方法,大家相互学习.我这只算是一个笨方法.
         同时也有一些疑问,比如这些不同的.cs文件,他们组织的依据是什么,有时候我发现,要完成的功能,可能不是在它自己的文件夹中,组织的原则又是什么呢?还有就是CompanyName.Survey以及相似文件夹,是用来干什么.
    另外对模块的学习,一个相当不错的地方,包括用c#自定义模块,这里有很详细的示例
    http://dotnetnuke.dk/Default.aspx?PageContentID=8&tabid=60,也包括了一些可下载的moudle,不过对http://www.dotnetnuke.com/,不知道怎么利用里边的资源.
            对dnn的了解,我只是一知半解,感谢灵感之源和中Rainbow,从他们那学到很多东西,希望能得到大家的指点.
    posted @ 2004-09-20 19:08 做人要厚道 阅读(2133) | 评论 (4) | 编辑
     

    2004年8月30日

    学习笔记
    1.SQL Server 联机文档强烈建议您不要使用“sp_”作为名称前缀来创建任何存储过程,因为此类名称已经被指定给系统存储过程;

    2.在管理数据库连接和连接字符串时,应该努力做到:
    •

    通过在多个客户端中多路复用数据库连接池,帮助实现应用程序的可伸缩性。

    •

    采用可配置的、高性能的连接池策略。

    •

    在访问 SQL?Server 时使用 Windows 身份验证。

    •

    在中间层避免模拟。

    •

    安全地存储连接字符串。

    •

    尽量晚地打开数据库连接,尽量早地将其关闭。

    使用连接池

    通过数据库连接池,应用程序可以重用池中现有的连接,而不必反复与数据库建立新的连接。该技术可显著提高应用程序的可伸缩性,因为有限数量的数据库连接可以为数量大得多的客户端提供服务。同时,由于可以节省建立新连接所需的大量时间,该技术还能够改善性能。

    许多情况下,对于您的应用程序而言,SQL Server .NET 数据提供程序的默认连接池设置可能已经足够了。在开发和测试基于 .NET 的应用程序的过程中,建议您对规划通信模式进行模拟,以确定是否需要修改连接池大小。

    需要生成可伸缩的高性能应用程序的开发人员应该最大限度地减少使用连接的时间,只在检索或更新数据时才使连接保持打开状态。连接关闭时,将被返回到连接池,并可供重用。在此情况下,到数据库的实际连接不会被切断;不过,如果连接池被禁用,则到数据库的实际连接将被关闭。

    posted @ 2004-08-30 14:55 做人要厚道 阅读(680) | 评论 (0) | 编辑
     

    2004年8月26日

    智能客户端,学习中
    http://daliancomputer.com/edu/{78.107.66.50.80.66.62.62}.html

    还是没有发现智能客户端的优势,有待继续研究,代码还没有看明白
    posted @ 2004-08-26 13:27 做人要厚道 阅读(575) | 评论 (0) | 编辑
     
    仅列出标题