在开发过程中,收集了一些值得提出来的经验:
1、 相对于原来的for语句foreach具有更好的执行效率,foreach的平均花费时间只有for的30%。通过测试结果在for和foreach都可以使用的情况下,我们推荐使用效率更高的foreach。另外,用for写入数据时间大约是读取数据时间的10倍左右;
2、 在asp.net程序中,使用sa账号的是一种非常不安全的做法,它具有在数据库上执行任何操作的权限。黑客可以调用类似于xp_cmdshell这样的扩展存储过程进行攻击;
3、 在处理数据交互的时候,尽量将组织SQL语句的处理放到中间层(比如专门的数据操作类、存储过程等),这是防止注入式攻击的有效方法;
4、避免到服务器的不必要的往返过程。使用 Page.IsPostBack 避免对往返过程执行不必要的处理;
5、 一定要禁用调试模式;
6、 一般情况下,读取大量数据,对返回数据不做大量处理用SqlDataReader.对返回数据大量处理用DatSet比较合适.对SqlDataReader和DataSet的选择取决于程序功能的实现;
7、数据绑定建议使用<%# ctype(Container.DataItem,DataRowView).Row("字段名") %>。数据量大的时候可提高几百倍的速度;
1、用SqlDataSource访问数据库库的方法:
<asp:SqlDataSource ID="SqlDS_Search" runat="server" ConnectionString="<%$
ConnectionStrings:chtNorthwind %>"
SelectCommand="SELECT [员工号码], [姓名], [性别], [部门], [照
片] FROM [章立民研究室] WHERE ([部门] = @部门) ORDER BY [员工号码]" />
往sql里面传参数的方法:
SqlDS_Search.SelectParameters.Clear();//先清空,好习惯
SqlDS_Search.SelectParameters.Add("部门",部门参数的值);
2、Gridview 中显示某个字段的方法<%# Eval("员工号码") %>
Gridview中可以调用后台定义的函数。
例如:<%# FormatGender(Eval("性别")) %>
后台定义的方法:
// 将性别改用图标来显示。
protected string FormatGender(object dataGender)
{
string myGender = Convert.ToString(dataGender);
string strReturn = "";
switch (myGender)
{
case "男":
strReturn = "Images/male.gif";
break;
case "女":
strReturn = "Images/female.gif";
break;
}
return strReturn;
}
3、myDate.DayOfWeek获取此实例所表示日期的星期几
myDate.ToLongDateString()获取此实例的值等效的长日期字符串eg:2009-2-14 20:34:06
myDate.ToShortDateString()获取此实例的值等效的短日期字符串eg:2009-2-20
4、可以用fromview内嵌一个table来显示详细的信息
EG:
<asp:FormView ID="FormView1" runat="server" DataKeyNames="员工号码"
DataSourceID="SqlDS_Detail">
<ItemTemplate>
<table>...</table>
</ItemTemplate>
</asp:FormView>
5、SQLCmd.ExecuteReader(CommandBehavior.SingleRow)
CommandBehavior.SingleRow指定执行SQL时返回一条记录,可以提高效率
6、嵌入文字的边框的效果的代码:
<fieldset>
<legend>嵌入的文字</legend>
</fieldset>
7、asp.net2.0的Wizard控件能够让您快速创建类似向导的步进式界面
8、MyDataView.RowFilter = "类别编号 = " + ((DataRowView)(e.Row.DataItem))["类
别编号"].ToString();
获取或设置用于筛选在 System.Data.DataView 中查看哪些行的表达式。
9、dataview.RowFilter="表达式";
作用:获取或设置用于筛选在 System.Data.DataView 中查看哪些行的表达式。
eg:
MyDataView.RowFilter = "类别编号 = " + ((DataRowView)(e.Row.DataItem))["类别编
号"].ToString();
10、gridview中格式化money的方法:
<%# Eval("订货金额", "{0:c}") %>或者<%# Bind("订货金额", "{0:c}") %>
11、调用被绑定至 GridView 数据列"库存量"字段的值的方法:
decimal stock =Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "库存量"));
12、设定gridview中某一行的背景的方法:e.Row.BackColor = Color.Red;
13、rand.Next(maxvalue):返回一个小于所指定最大值的非负随机数。
14、Gridview中的数据绑定Eval和Bind的区别:
Eval 函数是单向只读绑定。Bind 函数是双向可更新绑定。
15、AJAX的确认对话框代码:
<ajaxToolkit:ConfirmButtonExtender ID="CBE" runat="server"
TargetControlID="LinkButton1" ConfirmText="谢谢您的选购! 您确定要结帐了吗
?"> </ajaxToolkit:ConfirmButtonExtender>
16、嵌入文字的方框的代码:
<asp:Panel ID="Panel1" runat="server" GroupingText="UpdatePanel 控件的内容"
Height="64px" Width="432px"></asp:Panel>
17、凡是通过URL传递的中文的参数都要经过Server.UrlEncode("中文参数")这个函数进
行编码
18、清空文本框中的内容:NameTextBox.Text = String.Empty;
19、从输入框中读入的内容最好用Server.HtmlEncode编码过:
string Department = Server.HtmlEncode(DepartmentTextBox.Text);
20、GridView中,如果要默认选中第一条记录,则要将gridview的这个属性设为零
SelectedIndex="0"
21、gridview中日期格式化的方法:在日期所在的列中加入这个属性:
DataFormatString="{0:d}" 格式化后的形式如下所示:1996-7-26
22、给带有参数的SqlDataSource赋值的方法:
eg:sqlDSObj.SelectParameters["CategoryID"].DefaultValue = r["类别编
号"].ToString();
23、将图像以二进制的数据存入数据库的方法:
public void UpdateEmployeePhoto(int EmployeeId, FileUpload PhotoFile)
{
if ((PhotoFile == null) || (!PhotoFile.HasFile))
{
return;
}
// 取得上传之照片文件的长度。
int fileLen = PhotoFile.PostedFile.ContentLength;
// 创建一个字节数组来存储文件的内容。
byte[] Input = new byte[fileLen];
Input = PhotoFile.FileBytes;
using (SqlConnection cn = new SqlConnection
(ConfigurationManager.ConnectionStrings["chtNorthwind"].ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("UPDATE 章立民研究室 SET 照
片 = @Photo WHERE 员工号码 = @EmployeeID", cn))
{
cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value =
EmployeeId;
cmd.Parameters.Add("@Photo", SqlDbType.Image).Value = Input;
cn.Open();
cmd.ExecuteNonQuery();
}
}
}
24、判断字符串是否为空的函数:
!String.IsNullOrEmpty(inputString)