C#,数据库编码规范讲解
2017-08-25 17:52
615 查看
C#语言编程规范
遵循一定的编程规范,即有利于工程建设、团队合作,也是每个程序员的自身素质的体现。本文结合研发群实际工作情况,筛选了部分重要的、易实现的规范1.1 命名规范
1.1.1 标识符命名
标识符的命名应当符合“min-length && max-information”(最小长度&最大信息量)原则。标识符要采用常用英文单词或其组合,便于记忆和阅读,尽量避免使用汉语拼音来命名,推荐采用应用领域相关的术语来命名。
标识符只能由26个英文字母,10个数字,及下划线的一个子集来组成,并严格禁止使用连续的下划线(不易分辨),下划线也不能出现在标识符头或结尾(预编译开关和利用工具生成的代码除外);数字也不能出现在标识符的头部。
常量名都要使用大写字母, 用下划线 ‘_’ 分割单词。
程序中不要出现仅靠大小写区分的相似的标识符。
推荐 | 不推荐 |
---|---|
string strName; | string strOtherName; |
string strname; | string STRNAME; |
7. 尽量避免名字中出现数字编号,如Value1、Value2等,除非逻辑上的确需要编号。
1.1.2 类、方法命名
类名采用大小写结合的方法,构成类名的每个单词的首字母的首字母也必须大写。在构成类名的单词之间不用下划线。接口命名在名字前加上“I”前缀,其它和类命名规范相同。
类方法的局部变量命名采用Camel规范或匈牙利规范。
方法名用大写字母开头的单词组合而成,且应当使用“动词”或者“动词+名词”(动宾词组)。
1.1.3 控件命名
控件命名应采用完整的英文描述符命名,名字的前缀是控件类型名缩写,符合匈牙利命名规范。推荐 | 不推荐 |
---|---|
Lable控件 lblName | Lable控件 Name |
Button控件 btnSave | Button控件Save |
TextBox控件 txtName | TextBox控件 Name |
DataGrid控件 gridList | DataGrid控件 list1 |
1.2 代码布局
源代码文件(.cs)的布局顺序是:using语句、命名空间、类。if、else、else if、for、while、do等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加 { }。
//推荐 if (iCount < 100) { iCount = 500; } //不推荐 if (iCount < 100) iCount = 500;
禁止使用TAB键,必须使用空格进行缩进。缩进为4个空格。
程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。{ }之内的代码块使用缩进规则对齐。
推荐 不推荐
//推荐 void Function(int intVar) { // 独占一行并与引用语句左对齐。 while (condition) { DoSomething() // 与{ }缩进4格 } } //不推荐 void Function(int intVar){ while (condition){ DoSomething(); }}
5.不同逻辑程序块之间要使用空行分隔。
//推荐 void Hey(void) { [Hey实现代码] } // 空一行 void Ack(void) { [Ack实现代码] } //不推荐 void Hey(void) { [Hey实现代码] } void Ack(void) { [Ack实现代码] } // 两个函数的实现是两个逻辑程序块,应该用空行加以分隔。
6.前台ASPX页面中标签必须规整对应,保存之前利用VS格式化工具格式化。
1.3 表达式和语句
在表达式中使用括号,使表达式的运算顺序更清晰。if (((intYear % 4 == 0) && (intYear % 100 != 0))||(intYear % 400 == 0)) if (intYear % 4 == 0 && intYear % 100 != 0 || intYear % 400 == 0)
2.避免表达式中的附加功能,不要编写太复杂的复合表达式
3.在switch语句中,每一个case分支必须使用break结尾,最后一个分支必须是default分支。
正确 错误
switch (iMessage) { case SPAN_ON: [处理语句] break; case SPAN_OFF: [处理语句] break; default: [处理语句] break; } switch (iMessage) { case SPAN_ON: [处理语句] break; case SPAN_OFF: [处理语句] default: [处理语句] break; }
4.写在C#中的SQL语句,对于关键字要求全部大写,每个主要的 SQL 子句放在不同的行上。
5.循环嵌套次数不推荐大于3次。
1.4 业务代码规范
1.4.1 适量注释
一般情况下,源程序有效注释量必须在20%以上,尤其对个性化且功能较复杂的代码要有关键性的注释,注释语言必须准确、易懂、简洁。1.4.2 变量初始化
值类型变量(int、struct)定义时要初始化值,引用类型变量(string、class)定义时,能初始化值的尽量初始化。1.4.3 字符串拼接
由于字符串本身就是一个类,是引用类型的,在对字符串作拼接时,如果字符串较多并且需要多次拼接的情况下,C#使用StringBuilder类实现字符串拼接。1.4.4 DataView的使用
获取DataView对象数据前,必须判断DataView中有数据.正确 错误
DataView dv= XX.Select(“123”); if(dv.count>0) { string a =dv[0][“name”]; } DataView dv= XX.Select(“123”); string a =dv[0][“name”];
针对DataView中的数据对象,如果需要判断为空,不能与null比较,因为该对象永远不会返回null,假如没有数据,返回的时DBNull对象。
DataView dv= XX.Select(“123”); if(dv.count>0) { If(dv[0][“name”].ToString()!=””) { //XXXXX } } DataView dv= XX.Select(“123”); if(dv.count>0) { If(dv[0][“name”]!=null) { //XXXXX } }
1.4.5 减少频繁访问数据库的代码
循环体中访问数据库表并且当该访问表脚本很慢时,如datagrid前台绑定方法展示(简单表不作要求,数据量多且表结构较复杂的应尽量减少,方法是:一次性取出放内存,前台方法从内存中读取展示;通过联合查询、存储过程从库中一次性取出);其他for foreach while循环中有访问数据库表脚本应避免!一次性取出的不要变相重复取,如上面已经定义了MisGuidRow,后面又重复出现该表的MisGuidRow。
1.4.7 SQL语句禁忌
避免使用select * from,一个原因是减少I/O开销,另外一个原因是走索引(不用建太多的覆盖索引、组合索引)。建议方法传字段参数,用多少取多少,自己可以用,别人也可以用。避免只是为判断是否存在,使用dv.count,尤其是dv是select * 返回的。
数据库开发规范
2.1 语法规范
2.1.1 关键字及变量命名
SQL中的关键字均使用大写字母,字段名、表名均使用小写字母。数据表最好起别名,以便于的优化器快速分析。
2.1.2 插入语句INSERT
尽量不要使用 INSERT INTO table VALUE(?,?,?,?,?)格式,要指出具体要赋值的字段,INSERT...SELECT的效率会有提高。2.1.3 查询语句 SELECT
SELECT与FROM语句之间只定义返回的字段名,除非返回所有的字段,尽量不要使用 * ,字段名应按照表的字段物理顺序编写,字段提取要按照“需多少、提多少”的原则(因为大批量数据的抽取会影响SQL缓存的效率)。使用COUNT()也是要避免的,因为COUNT()会对全字段做聚集,建议使用COUNT (0)或COUNT(1)这样的查询语句。
条件中使用OR 会引起全表扫描,比较影响查询效率,尽可能少用或不用,实在不行可以用UNION代替。NULL的检索要回避一下。
负逻辑如!=、<>、not in等,都会导致用表扫描来完成查询。当表较大时,会严重影响系统性能,可以用别的操作来代替。
使用DISTINCT是为了保证在结果集中不出现重复值,但是DISTINCT会产生一张工作表,并进行排序来删除重复记录,这会大大增加查询和I/O的操作次数。因此应当避免使用DISTINCT关键字。
使用ORDER BY和GROUP BY短语,任何一种索引都有助于SELECT的性能提高。注意如果索引列里面有NULL值,优化器将无法优化。
2.2 索引规范
2.2.1 索引创建的规则
通常如果一个表有5个字段经常作为查询条件,那么创建5个单独字段的索引,然后再创建一个包含这5个字段的组合索引。索引的列尽量编写在where条件语句的最后,以便执行计划命中索引。2.2.2 索引不被使用
索引不被使用的几种情况:null,比较,not函数2.2.3 索引列上不要计算
索引是针对原值建的二叉树,计算后原来的二叉树就用不上了。2.2.4 索引列上>= 代替
高效:select * from emp where deptno >=4低效:select * from emp where deptno > 3
两者的区别在于,前者dbms将直接跳到第一个deptno等于4的记录,而后者将首先定位到deptno等于3的记录并且向前扫描到第一个deptno大于3的。
2.3 注意事项
避免使用IN和NOT IN,使用EXIST和NOT EXIST代替。将计算从等号左边移到右边,例如:把a*2>4 改为a>4/2;把TO_CHAR(zip) = ‘94002’ 改为zip = TO_NUMBER(‘94002’)。
不要使用NOT,如Goods_no != 2,要改为: where Goods_no>2 or Goods_no<2。
不要使用is null , 如WHERE DEPT_CODE IS NOT NULL 要改为: WHERE DEPT_CODE >=0;
删除全表数据时使用truncate 替代 delete,同时注意truncate只能在删除全表时适用,因为truncate是ddl而不是dml语句。
相关文章推荐
- C#编码规范和编程好习惯(3)
- VB.net 编码规范(也适用于C#)
- C#的编码规范详细说明
- C# 连接SQL数据库、常用的连接字符串讲解、常用的数据库操作方法
- 用C#制作屏幕捕获程序 和 C#编码规范、编程好习惯
- 隐士的数据库编码规范草稿
- C#编码规范和编程好习惯
- C# 编码规范和编程好习惯
- C#中的命名规则与编码规范
- C#命名规则和编码规范
- C# 编码规范和编程好习惯
- 【浙大网新图灵通讯】无废话简单高效C#编码规范20100612
- C#编码规范2
- 【浙大网新图灵通讯】无废话简单高效C#编码规范20100621
- C#编码规范和编程好习惯(2)
- 【浙大网新图灵通讯】无废话简单高效C#编码规范20100611
- C#编码规范(三)
- C# 编码规范和编程好习惯
- 自己总结的C#编码规范--1.命名约定篇
- c# 编码规范4