*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: 冰彩虹 E-mail:horizon20@163.com QQ:68107058
*/ 时间: 2007-8-24 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------
1. 静态方法通过类名直接访问;非静态方法不能访问静态成员;
2. C#不允许使用未赋值的变量;
3. C#中,派生类只能从一个类中继承,但是可以继承多个接口;
4. 当用查询数据库中表的字段进行比较时,由于数据库表的建立对字段的长度有设置,不够的会用空格补充,所以记得用Trim()方法将空格去掉
5. 每次使用完DataReader对象后都应该调用Close方法。如果Command包含输出参数或返回值,那么在DataReader关闭之后,将无法访问这些输出参数或返回值。注意:当DataReader打开时,该DataReader将以独占方式使用Connection。在初始DataReader关闭之前,将无法对Connection执行任何命令(包括创建另一个DataReader);
6. 列表型控件,如CheckBoxList,DropDownList,ListBox,RadioButtonList等,在绑定时需要设定DataTextField(指定显示为Text的数据列)、DataValueField(指定显示为Value的数据列);
7. 直接在DataReader对象中取值,需要先执行该对象的Read()方法,然后对该对象执行索引似的访问(2006年10月20日);
8. 对页面Page_Load的IsPostBack的判断,对很多Web控件的提交有很大的影响,如DropDownList等;
9. 运用ObjectDataSource中间控件时提供的泛型方法需要满足普遍原理,如Update、Insert操作时SQL语句应该完全给出对所有字段的引用操作;
10. 检查代码时,特别留意页面的Page_Load事件代码;
11. 查询可以使用SQL,也可以对DataSet进行查询:
ds.Tables[0].DefaultView.RowFilter = "查询条件";
12. 在分页的情况下,如果最后一页只有一行,删除该行时会发生错误,因为删除记录后需要重新绑定数据,而此时DataGrid还会自动显示原来的数据页,而该页已经不存在了,所以在重新绑定前要判断下,需要时手工修改CurrentPageIndex属性
13. 在C#中给float变量赋值时,有一种特殊情况,语句:float y=3.5;//不会被编译,因为类似3.5这样带有小数部分的数字常量会被C#认为是拥有更高精度的double值,必须显式地把浮点常量转换为float值:float y=(float)3.5;//或者float y=3.5F;
14. 集合中不允许存在重复的对象引用;常用列表有ArrayList、SortedList(有序的排放);
15. 图片一般是通过二进制流形式读进读出数据库的,也可以在数据库中存放图片的链接地址来访问图片;
16. 发送邮件:<a href="mailto:karlen_xu@hotmail.com" target="_blank">联系King</a>
17. GridView进行数据绑定时,在RowDataBound事件里不需要手动循环操作;而且很容易忽略对e.Row的RowType进行判断;GridView模版列里还可以嵌套GridView;
18. GridView中隐藏字段需要放在模版列里才能取到对应控件绑定的值;另外,客户端RadioButton在模版列中要设置name属性才能实现单选的效果,也可以实现客户端控件的属性绑定值’<%# Eval("ContractNoSys") %>’,而且可以将多个值绑定到一个属性上,如:’ <%# Eval("ContractNoSys") %>,<%# Eval("ContractName") %>’
19. System.Data.DataRowBuilder不可访问,因为它受保护级别限制,所以不能直接new一个DataRow对象,必须通过一个DataTable对象来创建:DataRow row=table.NewRow();
20. Dictionary、HashTable等作数据源时,要用它的Values属性而不是其本身;
21. 通过Sql实现查询数据分页
方法一:含主键
SELECT TOP PageSize 数据列
FROM 表名
WHERE ( 1 = 1 AND 查询条件 AND RowGuid NOT IN
(SELECT TOP PageSize *PageIndex RowGuid FROM 表名 WHERE (1 = 1 AND 查询条件) order by RowGuid ) order by RowGuid)
方法二:不含主键
WITH 任意别名 AS (select ROW_NUMBER() over(排序条件) AS ROWNUMBER ,* from 表名/视图名 WHERE 查询条件 ) SELECT * FROM任意别名WHERE ROWNUMBER BETWEEN startIndex AND endIndex
方法三:
通过DataAdapter对象的Fill(DataSet dataSet, int startRecord, int maxRecords, string srcTable)方法填充DataSet
22. 对数据库的批量操作应该放在一个事务里处理,一旦出错,操作整体回滚;
23. WebService方法的返回值必须是可以序列化的,这样才可以在互联网里传输;
24. 分页按钮
<font style='font-size: 9pt; font-family: webdings;'>
<asp:LinkButton ID="firstPage" runat="server" OnClick="firstPage_Click">9</asp:LinkButton>
<asp:LinkButton ID="previousPage" runat="server" OnClick="previousPage_Click">7</asp:LinkButton>
</font>
<asp:Label ID="currentPage" runat="server" Text="1"></asp:Label>
/
<asp:Label ID="totalPage" runat="server" Text="1"></asp:Label>
<font style="font-size: 9pt; font-family: webdings">
<asp:LinkButton ID="nextPage" runat="server" OnClick="nextPage_Click">8</asp:LinkButton>
<asp:LinkButton ID="lastPage" runat="server" OnClick="lastPage_Click">:</asp:LinkButton>
</font>
25. 使用wsdl命令将webservice生成一个代理类(cs文件),然后编译该cs文件为dll,最后在代码里使用
26. GridView里HyperLinkField模版列设置DataNavigateUrlFields和DataNavigateUrlFormatString属性
27. 使用DataAdapter进行Update操作时,需手动设置UpdateCommand;使用CommandBuilder时,必须满足DataAdapter操作的是单个数据库表,而且必须指定Select语句(必须包含主键),这样才可以自动生成Update、Delete、Insert语句
28. 使用DataAdapter进行Update操作时,使用DataAdapter的OnRowUpdating事件可检测防止数据共享冲突;更新之后OnRowUpdated事件处理
29. web服务中的状态管理是可选的,并且默认情况下是禁用的,要启动状态管理,必须:实现web服务的类必须从System.Web.Services命名空间的WebService类中继承,继承类可以自动访问Application对象,只有把WebMethod属性EnableSession设置为true,保存在Session中的数据才是有效的
30. web服务三基石:SOAP(简单对象访问协议,是一种基于XML的通信协议),WSDL(web服务描述语言),UDDI(统一描述、发现和集成)
31. 方法一:利用WebBrowser控件的函数接口来打印
<object ID=’WebBrowser1’ WIDTH=0 HEIGHT=0 CLASSID=’CLSID:8856F961-340A-11D0-A96B-00C04FD705A2’>
//打印 WebBrowser1.ExecWB(6,1);
//打印设置 WebBrowser1.ExecWB(8,1);
//打印预览 WebBrowser1.ExecWB(7,1);
//直接打印 WebBrowser1.ExecWB(6,6);
方法二:IE打印
通过把数据绑定在GridView里
<!—startprint-->
<asp:DataGird …>…</ asp:DataGird >
<!—endprint-->
Function preview()
{
bdhtml=window.document.body.innerHTML;
sprnstr=” startprint”;
eprnstr=” endprint”;
prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17);
prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));
window.print();
}
32. GridView模版列里可以进行类似如下的操作
<asp:TemplateField HeaderText="项目名称">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%#Eval("ProjectName").ToString().Length>5 ?Eval("ProjectName").ToString().Substring(0,5)+"..." : Eval("ProjectName") %>' ToolTip='<%# Eval("ProjectName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
33. ViewState里存放的对象必须是可序列化的
34. DateTime.Now.ToString("yyyyMMddHHmmss"); 20070810131554
35. Server.Transfer:传输到的页也应该是.aspx页。例如,传输到.asp或.asmx页是无效的。Transfer方法保留QueryString和Form集合。Transfer调用End,后者在完成时引发ThreadAbortException 异常。ASP.NET 不验证当前用户是否有权查看由Transfer方法提交的资源。虽然ASP.NET授权和身份验证逻辑运行于调用原始资源处理程序之前,但ASP.NET仍将直接调用Transfer方法指示的处理程序,并且不为新资源重新运行授权和身份验证逻辑。如果应用程序的安全策略要求客户端具有适当的授权才能访问相应的资源,则应用程序应强制再次授权或提供自定义访问控制机制。可以使用Redirect方法而不是Transfer方法强制再次授权。Redirect方法执行客户端重定向,此时浏览器请求新资源。此重定向是一个进入系统的新请求,因此,需要接受Microsoft Internet信息服务 (IIS)和ASP.NET安全策略的所有身份验证和授权逻辑的检验。可以在应用程序调用Transfer方法之前,通过结合使用IsInRole方法的自定义授权方法来验证用户是否有权查看资源