我自己记录的C#2.0笔记之二

1.
.NET 2005 下,缓存数据库表很简单:
用命令配置数据库缓存环境:    aspnet_regsql.exe -S <Server> -U <Username> -P <Password> -ed -d Northwind -et -t Employees
配置页面环境:   

    在页面上配置:
        <%@ OutputCache Duration="3600" SqlDependency="Northwind:Employees" VaryByParam="none" %>

    在 Web.config 的 <system.web> 下配置:
        <caching>
          <sqlCacheDependency enabled = "true"    pollTime = "10000"  >
        <databases>
          <add name="xhdb"
             connectionStringName="xhdbConnectionString1"
             pollTime = "10000"
          />
        </databases>
          </sqlCacheDependency>
        </caching>

2.如何缓存数据库中的一个表
3.配置 Login 控件.
    Web.Config 中的 <System.web> 下配置:
    <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
        <providers>
            <remove name="AspNetSqlProvider" />
            <add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" StringName="SqlServices" applcationName="/" />
        </providers>
    </membership>
    配置 connectionStrings .
        <add name="SqlServices" connectionString="Data Source=u9xinhai\xhdb;user id=sa;password=sa;Initial Catalog=xhdb;" />

    附: Membership 在 Machine.config 中的配置:
    <membership>
            <providers>
                <add name="AspNetSqlMembershipProvider"
                    type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
                    connectionStringName="LocalSqlServer"
                    enablePasswordRetrieval="false"
                    enablePasswordReset="true"
                    requiresQuestionAndAnswer="true"
                    applicationName="/"
                    requiresUniqueEmail="false"
                    passwordFormat="Hashed"
                    maxInvalidPasswordAttempts="5"
                    minRequiredPasswordLength="7"
                    minRequiredNonalphanumericCharacters="1"
                    passwordAttemptWindow="10"
                    passwordStrengthRegularExpression="" />
            </providers>
        </membership>

4.WebPart配置:
    1、WebPart的使用必须基于一个通过身份验证的用户会话。
    2、WebPart的使用的个性化应用于所有人的选项默认是禁用的,可以通过修改Web.config来完成
    <webParts>
       <personalization>
          <authorization>
             <allow users="*" verbs="enterSharedScope" />
          </authorization>
          </personalization>
        </webParts>
    3、WebPart 默认使用页面的 URL 存储个性化数据.但是不包含 querystrings,现在要实现在通用的页面(模版)来实现简单的门户系统,通过不同的querystrings来读取个人,部门等的数据。这样个人自己设定的设定可以直接和别人共享。这样的需求在现有的WebPart系统上无法实现,在WebPart Components for Asp.net 2.0: Workspace home URL:http://www.gotdotnet.com/workspaces/workspace.aspx?id=65fa26c3-a62a-49d6-895d-422272e53a0c 有一个这样的WebPart系统可以满足需求。这个WebPart的作者介绍:http://fredrik.nsquared2.com/viewpost.aspx?PostID=326

     4、启用WebPart得导出功能:修改web.config中WebPart的设置
      <webParts enableExport="true">

    5、导入自定义的webPart 出现错误:Cannot add a control of Type DotnetClubPortal.WebControls.WebParts.RSSReader. The Type must be loadable by BuildManager.GetType(string typeName).
    处理办法:修改web.config文件:
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <probing privatePath="Bin" />
        </assemblyBinding>
     </runtime>
5. OQL 中  ObjectSet 方法的 GetObjectSet 方法并没有实现绑定数据源。自行实现下面API,辅助之
    public List<T> ObjectSet2List<T>(ObjectSet os)
    {
        List<T> retList = new List<T>();

        foreach (T et in os)
        {
            retList.Add(et);
        }

        return retList;
    }

    调用 :
        this.GridView1.DataSource = ObjectSet2List<dbo.EquipType>( DBFact.thisOne.GetOQL_OM().GetObjectSet( dbo.Sc_Dbo.Equiptype ) );
        this.GridView1.DataBind();
    不知道OQL为什么没有实现这个方法,呵呵。
    另外,实体类的 Save 有问题.
    如果更新一个实体.
    dbo.EquipSynopsis es = DBFact.thisOne.GetOQL_OM().GetObject(dbo.Sc_Dbo.EquipSynopsis,
    dbo.Sc_Dbo.EquipSynopsis.EquipCode == 333 &&
    dbo.Sc_Dbo.EquipSynopsis.Key == "DD") as dbo.EquipSynopsis ;
            

        es.Value = "dj fdfj";
        es.Save();

    将生成如下SQL:
    exec sp_executesql N'UPDATE [EquipSynopsis]
    SET 
      [Value] = @P1
    WHERE 
    [EquipCode] = @P2',N'@P1 nvarchar(7),@P2 int',@P1=N'dj fdfj',@P2=333

    也就是说,Save 方法中的Where 子句,只有一个条件,丢失其它条件.所以更新操作的Save 只能是一个条件.

   OQL 的 Update 方法并不真正的执行. 需要用
    ObjectManager.ExecuteCommand( OQL.Update())  ; 才行.

   OQL 中对 View 的操作也不是很好.如:
    在 数据库中建一个表 V_Equip ,代码自动生成 ORM 类.
    把 数据库中表 V_Equip 改为 视图 V_Equip .
    可以生成 SQL 语句
    但是,不一定能 更新,插入.
    而且. 用 ObjectManager.GetObjectSet 方法 ,返回的实体中的 字段的值是空的.
    用实体类的 GetByCriteria 也返回空对象. 自己写一个 将 DataTable 转换成实体类的 函数.
   
    public static List<T> DataTable2List<T>(DataTable dt) where T:new ()
        {
            if (dt == null) return null;
            List<T> liRet = new List<T>() ;
            if (dt.Rows.Count == 0 || dt.Columns.Count == 0) return liRet;

            //List<string> liProps = ReflectHelper.GetProperties(typeof(T));
            //Hashtable htProps = ReflectHelper.GetPropertiesHash(typeof(T));
            PropertyInfo[] pis = typeof(T).GetProperties() ;
            foreach (DataRow   dr  in  dt.Rows )
            {
                T entryT = new T();
                foreach (DataColumn dc in dt.Columns)
                {
                    foreach (PropertyInfo pi in pis)
                    {
                        if (dc.ColumnName.ToLower() == pi.Name.ToLower() )
                        {
                            pi.SetValue(entryT, dr[dc], null);
                            break;
                        }
                    }
                }
                liRet.Add(entryT);
            }
            return liRet;
        }


6.    母版的子版中,如何调用母版的方法.    ((Admin_equip_TempletSynopsisMaster)Page.Master).BindData();
    一个页面,如何调用另一个页面的方法.
7. 用 3DES 加密.
        public static byte[] EncryptString(string ToEncryptString, byte[] byKey, byte[] byIV)
        {
            System.IO.MemoryStream memStm = new MemoryStream();
            TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();

            CryptoStream encStream = null;
            encStream = new CryptoStream(
               memStm, tdes.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write
               );

            byte[] byIn = System.Text.Encoding.Default.GetBytes(ToEncryptString);
            encStream.Write(byIn, 0, byIn.Length);
            encStream.FlushFinalBlock();
            encStream.Close();
            return memStm.ToArray();
        }
8.如何对指定的一个目录进行身份验证.
    在Web.Config 里添加两部分。第一部分:
    <authentication mode="Forms" >
        <forms loginUrl="~/Login.aspx" defaultUrl="~/Admin/mana.aspx" name=".ASPXFORMSAUTH"></forms>
    </authentication>
    第二部分:
    <configuration>
      <location path="Admin">
        <system.web>
          <authorization>
        <deny users="?" />
          </authorization>
        </system.web>
      </location>
    </configuration>
9.混淆器,实现效果如  OQL 。就可以了。
10.如果在程序的一个页面中设置所有页面的Cach过期时间.
    当 Web.config 文件被修改后,该Web站点会重新启动. 所以.....更改 Web.config 文件就可以了.
11.写一个只自定义的查找工具.支持只查找目录和文件,等等
12.写一个字符串文本格式化工具,比如:
    把 a,b,c 格式化成        a        b        c
13. ASP.NET 2.0 的预编译.
14. 把 ASP.NET 2.0 编译成一个 DLL , ASP.NET 2.0 把 DLL 的编译搞的很乱套.
15. 混淆器.
16. .NET 与设计模式 一书. 中的开源项目 <Nuke>.
17. 星号查看器 也是一个必备的工具之一.

posted @ 2009-03-09 00:53  NewSea  阅读(260)  评论(0)    收藏  举报