我自己记录的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. 星号查看器 也是一个必备的工具之一.
|
作者:NewSea 出处:http://newsea.cnblogs.com/
QQ,MSN:iamnewsea@hotmail.com 如无特别标记说明,均为NewSea原创,版权私有,翻载必纠。欢迎交流,转载,但要在页面明显位置给出原文连接。谢谢。 |

浙公网安备 33010602011771号