想到什么写什么,看到什么抄什么先吧。哈哈
在开发过程中,通过摸索查资料,收集了一些值得提出来的经验:
a) 相对于原来的for语句foreach具有更好的执行效率,foreach的平均花费时间只有for的30%。通过测试结果在for和foreach都可以使用的情况下,我们推荐使用效率更高的foreach。另外, 用for写入数据时间大约是读取数据时间的10倍左右;
b) 在asp.net程序中,使用sa账号的是一种非常不安全的做法,它具有在数据库上执行任何操作的权限。黑客可以调用类似于xp_cmdshell这样的扩展存储过程进行攻击;
c) 在处理数据交互的时候,尽量将组织SQL语句的处理放到中间层(比如专门的数据操作类、存储过程等),这是防止注入式攻击的有效方法;
d) 避免到服务器的不必要的往返过程。使用 Page.IsPostBack 避免对往返过程执行不必要的处理;
e) 一定要禁用调试模式;
f) 一般情况下,读取大量数据,对返回数据不做大量处理用SqlDataReader.对返回数据大量处理用DatSet比较合适.对SqlDataReader和DataSet的选择取决于程序功能的实现;
g) 数据绑定建议使用<%# ctype(Container.DataItem,DataRowView).Row("字段名") %>。数据量大的时候可提高几百倍的速度;
以上摘自
hedonister的专栏的 Web开发学习体会
++
*javascript打印控制
1。按钮不能放在<from runat="server">中
2。document.all("printbtn").style.visibility = 'hidden';//打印时隐藏打印按钮
<div id="printbtn"><input name="idPrint" type="button" value="打印" οnclick="doprint()"></div>
<div id="printbtn"><input name="idPrint" type="button" value="打印" οnclick="doprint()"></div>
3。<OBJECT id="factory" style="DISPLAY: none" codeBase="ScriptX.cab#Version=5,0,4,185" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" viewastext>
</OBJECT>
4。这里需要给出ActiveX ScriptX.cab的地址,你可以下载到自己的网站中并提供出来,也可以引用其他网站的。当用户访问该网页时,将自动判断该浏览器是否已装有,没有的话,弹出下载警告。同意下载之后,就可以了。
5。 factory.printing.topMargin="6";//存在最小默认值5.02
factory.printing.bottomMargin="6";//存在最小默认值4.13
factory.printing.leftMargin="2";//存在最小默认值5.08
factory.printing.rightMargin="2";//存在最小默认值6.79
</OBJECT>
4。这里需要给出ActiveX ScriptX.cab的地址,你可以下载到自己的网站中并提供出来,也可以引用其他网站的。当用户访问该网页时,将自动判断该浏览器是否已装有,没有的话,弹出下载警告。同意下载之后,就可以了。
5。 factory.printing.topMargin="6";//存在最小默认值5.02
factory.printing.bottomMargin="6";//存在最小默认值4.13
factory.printing.leftMargin="2";//存在最小默认值5.08
factory.printing.rightMargin="2";//存在最小默认值6.79
*DataGrid的表头其实就是html写的,所以可以通过覆盖html语句的方法来随意改变DataGrid的表头。html table能写成什么样子,他就可以变得怎么样。多行多列合并单元格制定样式……
*对服务器上的文件进行写操作,需要特别指定
1。IIS的匿名登陆角色:指定一个具有写权限的角色
2。web.config中指明登陆形式
<identity impersonate="true"/>
<authentication mode="Windows" />
<authentication mode="Windows" />
*通过=((TextBox)E.Item.FindControl("txtDateTD")).Text来获取控件,不只是在DataGrid中,以后要多加利用。
*利用
e.Item.Cells[0].Attributes.Add("onclick", "return confirm('删除么?')");来添加javascript的确认框。*哪里都可以添加正则表达式来做验证
<HeaderTemplate>年月日</HeaderTemplate>
<ItemTemplate><%# DataBinder.Eval(Container,"DataItem.TD_Time","{0:d}")%></ItemTemplate>
<EditItemTemplate><asp:RegularExpressionValidator Runat=server ControlToValidate="txtDateTD"
ErrorMessage="日期" ValidationExpression="(/d{4}|/d{2})//d/d?//d/d?"/>
<asp:TextBox Runat=server ID="txtDateTD"></asp:TextBox>
</EditItemTemplate></asp:TemplateColumn>
*
正反排序protected static string SortExp;//排序用
protected void Sort_Grid(object sender, DataGridSortCommandEventArgs e)
{
if(SortExp==e.SortExpression)
SortExp+=" DESC";
else
SortExp= e.SortExpression;
BindGrid();
}
*
通过Session.Abandon(); 调用Global的Session_End事件,同时在该事件中,结束自己的登陆状态 protected void Session_End(Object sender, EventArgs e)
{
Application.Lock();
Application.Remove(Session.SessionID.ToString());
Application["OL_UserCount"]=(int)Application["OL_UserCount"]-1;
Application.UnLock();
}
*repeater比DataGrid更自由
在windows 2003下安装了VS2003,在运行web应用程序的时候出现一下错误:对路径“D:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/test/db58b339/50f84c0”的访问被拒绝。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.UnauthorizedAccessException: 对路径“D:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/test/db58b339/50f84c0”的访问被拒绝。
ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限。ASP.NET 有一个在应用程序没有模拟时使用的基进程标识(通常,在 IIS 5 上为 {MACHINE}/ASPNET,在 IIS
6 上为网络服务)。如果应用程序正在通过 <identity impersonate="true"/> 模拟,则标识将为匿名用户(通常为IUSR_MACHINENAME)或经过身份验证的请求用户。
由于在iis 6.0中,默认的应用程序池中的标示用的是Network Service,所以在进程中是使用Network Service这个帐号运行来运行w3wp.exe进程,而当我们在运行VS 2003的时候是需要对D:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary
ASP.NET Files/目录下进行读写操作的,所以看了一下该文件夹,发现没有Network Service,添加上该账号,同时选上FULL CONTROL,问题解决,但是至于为什么会产生这个问题我不大清楚,因为在安装WINDOWS 2003的时候,Network Service账号是存在于Temporary ASP.NET Files该文件夹安全列表中的。
顺便提一下,在IIS6.0中的默认应用程序池-->属性-->标示中把Net Service改成Local System该问题也可以解决。
徐虎的专栏
待续
protected void Session_End(Object sender, EventArgs e)
{
Application.Lock();
Application.Remove(Session.SessionID.ToString());
Application["OL_UserCount"]=(int)Application["OL_UserCount"]-1;
Application.UnLock();
}
*repeater比DataGrid更自由
在windows 2003下安装了VS2003,在运行web应用程序的时候出现一下错误:对路径“D:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/test/db58b339/50f84c0”的访问被拒绝。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.UnauthorizedAccessException: 对路径“D:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/test/db58b339/50f84c0”的访问被拒绝。
ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限。ASP.NET 有一个在应用程序没有模拟时使用的基进程标识(通常,在 IIS 5 上为 {MACHINE}/ASPNET,在 IIS
6 上为网络服务)。如果应用程序正在通过 <identity impersonate="true"/> 模拟,则标识将为匿名用户(通常为IUSR_MACHINENAME)或经过身份验证的请求用户。
由于在iis 6.0中,默认的应用程序池中的标示用的是Network Service,所以在进程中是使用Network Service这个帐号运行来运行w3wp.exe进程,而当我们在运行VS 2003的时候是需要对D:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary
ASP.NET Files/目录下进行读写操作的,所以看了一下该文件夹,发现没有Network Service,添加上该账号,同时选上FULL CONTROL,问题解决,但是至于为什么会产生这个问题我不大清楚,因为在安装WINDOWS 2003的时候,Network Service账号是存在于Temporary ASP.NET Files该文件夹安全列表中的。
顺便提一下,在IIS6.0中的默认应用程序池-->属性-->标示中把Net Service改成Local System该问题也可以解决。
徐虎的专栏
待续