• 项目心得


    一、sql
    1.排除工作日函数
    CREATE FUNCTION [dbo].[getWorkDays] 
    (
    @begin_date datetime,
    @end_date datetime
    )
    RETURNS int
    AS
    BEGIN
    DECLARE @workdays int
    DECLARE @begin_day_of_work int
    DECLARE @totalDays int
    
    SET @workdays = 0
    SET @totalDays = 0
    SET @begin_day_of_work = datepart(dw,@begin_date)
    IF (@begin_day_of_work>1 and @begin_day_of_work<7)
     BEGIN
       SET @begin_date = dateadd(day,-@begin_day_of_work%7,@begin_date)
       IF (@begin_day_of_work-2) > 0
          SET @workdays = @workdays - (@begin_day_of_work-2)  
    END	
    SET @totalDays = datediff(day,@begin_date,@end_date)+1
    SET @workdays = @workdays + floor(@totalDays/7)*5
    IF (@totalDays%7-2)>0
        SET @workdays = @workdays+(@totalDays%7-2)
    SET @workdays = @workdays-(SELECT count(*) FROM s_workday WHERE sdate>=@begin_date and sdate<=@end_date and is_holiday=1)
    SET @workdays = @workdays+(SELECT count(*) FROM s_workday WHERE sdate>=@begin_date and sdate<=@end_date and is_workday=1)
    RETURN @workdays
    END
    
    2.给表添加/删除字段,添加主键,外键
    用SQL语句添加删除修改字段
    1.增加字段
         alter table docdsp  add dspcode char(200)
    2.删除字段
         ALTER TABLE table_NAME DROP COLUMN column_NAME
    3.修改字段类型
         ALTER TABLE table_name ALTER COLUMN column_name new_data_type
    4.sp_rename 改名   
    更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。
        语法
        sp_rename [ @objname = ]
    'object_name' ,
            [ @newname = ] 'new_name'
            [ , [ @objtype =
    ] 'object_type' ]
            如:EXEC sp_rename   
    'newname','PartStock'
     
       示例  
      A.   重命名表  
      下例将表   customers   重命名为   custs。  
       
      EXEC   sp_rename   'customers',   'custs'  
       
      B.   重命名列  
      下例将表   customers   中的列   contact   title   重命名为   title。  
       
      EXEC   sp_rename   'customers.[contact   title]',   'title',   'COLUMN'  
    
    5.sp_help 显示表的一些基本情况
        sp_help 'object_name'    
    如:EXEC sp_help 'PartStock'
    6.判断某一表PartStock中字段PartVelocity是否存在
    if    
    exists     (select     *     from     syscolumns     where    
    id=object_id('PartStock')     and     name='PartVelocity') 
    print    
    'PartVelocity exists'
    else print 'PartVelocity not
    exists'
    另法:
    判断表的存在性:
        select count(*) from sysobjects where type='U'
    and name='你的表名'
    判断字段的存在性:
        select count(*) from syscolumns
        where
    	id  = (select id from sysobjects where type='U' and name='你的表名')
    	and name = '你要判断的字段名'
     
    一个小例子
    --假设要处理的表名为:tb
    --判断要添加列的表中是否有主键
    if exists(select 1 from sysobjects where
    parent_obj=object_id('tb') and xtype='PK')
    begin
    print
    '表中已经有主键,列只能做为普通列添加'
    --添加int类型的列,默认值为0
    alter table tb add 列名 int default
    0 
    end
    else
    begin
    print '表中无主键,添加主键列'
    --添加int类型的列,默认值为0
    alter table tb add 列名 int primary key default 0 
    end
    7.随机读取若干条记录
          Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id)
          Sql: server:select top n * from 表名 order by newid()
    	  mysql: select * From 表名 Order By rand() Limit n
    8.说明:日程安排提前五分钟提醒
          SQL: select * from 日程安排 where datediff(minute,f开始时间,getdate())>5
    9.前10条记录
          select top 10 * form table1 where 范围
    10.包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
          (select a from tableA ) except (select a from tableB) except (select a from tableC)
    11.说明:随机取出10条数据
          select top 10 * from tablename order by newid()
    12.列出数据库里所有的表名
          select name from sysobjects where type=U
    13.列出表里的所有的字段名
          select name from syscolumns where id=object_id('TableName')
    14.说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select中的case。
          select type,sum(case vender when A then pcs else 0 end),
    	  sum(case vender when C then pcs else 0 end),
    	  sum(case vender when B then pcselse 0 end) 
    	  FROM tablename group by type
    15.说明:初始化表table1
          TRUNCATE TABLE table1
    16.说明:几个高级查询运算词
      A: UNION 运算符
      UNION 运算符通过组合其他两个结果表(例如TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。
    	当 ALL 随 UNION 一起使用时(即 UNIONALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
      B: EXCEPT 运算符
      EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2中的行并消除所有重复行而派生出一个结果表。
    	当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
      C: INTERSECT 运算符
      INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。
    	当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
      注:使用运算词的几个查询结果行必须是一致的。
    17.说明:在线视图查询(表名1:a )
          select * from (SELECT a,b,c FROM a) T where t.a > 1;
    18.说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
          select * from table1 where time between time1 and time2
          select a,b,c, from table1 where a not between 数值1 and 数值2
    19.说明:in 的使用方法
          select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
    20.说明:两张关联表,删除主表中已经在副表中没有的信息
          delete from table1 where not exists (
    			select * from table2 where table1.field1=table2.field1)
    21.说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
      法一:select * into b from a where 1<>1
      法二:select top 0 * into b from a
    22.说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
          insert into b(a, b, c) select d,e,f from b;
    23.说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
          insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
      例子:..from b in "&Server.MapPath(".")&"\data.mdb" &" where..
    24.创建数据库
    	  CREATE DATABASE database-name
    25.说明:删除数据库
          drop database dbname
    26.说明:备份sql server
      --- 创建备份数据的 device
          USE master
          EXEC sp_addumpdevice disk, testBack, c:\mssql7backup\MyNwind_1.dat
      --- 开始 备份
          BACKUP DATABASE pubs TO testBack
    27.说明:创建新表
          create table tabname(col1 type1 [not null] [primarykey],col2 type2 [not null],..)	  
    	  根据已有的表创建新表:
          A:create table tab_new like tab_old (使用旧表创建新表)
          B:create table tab_new as select col1,col2… from tab_old definition only
    28.说明:
      删除新表:drop table tabname
    29.说明:
      增加一个列:Alter table tabname add column col type
      注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
    30.说明:
      添加主键:Alter table tabname add primary key(col)
      说明:
      删除主键:Alter table tabname drop primary key(col)
    31.说明:
      创建索引:create [unique] index idxname on tabname(col….)
      删除索引:drop index idxname
      注:索引是不可更改的,想更改必须删除重新建。
    32.说明:
      创建视图:create view viewname as select statement
      删除视图:drop view viewname
    33.说明:几个简单的基本的sql语句
      选择:select * from table1 where 范围
      插入:insert into table1(field1,field2) values(value1,value2)
      删除:delete from table1 where 范围
      更新:update table1 set field1=value1 where 范围
      查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
      排序:select * from table1 order by field1,field2 [desc]
      总数:select count * as totalcount from table1
      求和:select sum(field1) as sumvalue from table1
      平均:select avg(field1) as avgvalue from table1
      最大:select max(field1) as maxvalue from table1
      最小:select min(field1) as minvalue from table1
     
    注:删除某表中某一字段的默认值(先查询出此字段默认值约束的名字,然后将其删除即可)
        1.查询字段默认值约束的名字(t1为表名,id为字段名)
          select a.name as 用户表,b.name as 字段名,d.name as 字段默认值约束 
          from sysobjects a,syscolumns b,syscomments c,sysobjects d
          where a.id=b.id and b.cdefault=c.id and c.id=d.id 
          and a.name='t1' and b.name='id'
        2.将id字段的默认值约束删除(DF_t1_id为约束名字)
          alter table t1 DROP CONSTRAINT DF_t1_id
     
    修改字段默认值
    --(1)查看某表的某个字段是否有默认值约束
    select a.name as 用户表,b.name as 字段名,d.name as 字段默认值约束
    from sysobjects a
    inner join syscolumns b on (a.id=b.id)
    inner join syscomments c on ( b.cdefault=c.id )
    inner join sysobjects d on (c.id=d.id)
    where a.name='tb_fqsj'and b.name='排污口号'
    
    --(2)如果有默认值约束,删除对应的默认值约束
    declare @tablename varchar(30)
    declare @fieldname varchar(50)
    declare @sql varchar(300)
    
    set @tablename='tb_fqsj'
    set @fieldname='排污口号'
    set @sql=''
    
    select @sql=@sql+'
    alter table ['+a.name+'] drop constraint ['+d.name+']'  
    from sysobjects a  
    join syscolumns b on a.id=b.id  
    join syscomments c on b.cdefault=c.id  
    join sysobjects d on c.id=d.id  
    where a.name=@tablename and b.name=@fieldname 
    
    exec(@sql)
    
    --(3)添加默认值约束
    ALTER TABLE tb_fqsj  
    ADD DEFAULT ('01') FOR 排污口号 WITH VALUES
    
    --创建表及描述信息     
      create   table   表(a1   varchar(10),a2   char(2))  
       
    --为表添加描述信息  
      EXECUTE   sp_addextendedproperty   N'MS_Description',   '人员信息表',   N'user',   N'dbo',   N'table',   N'表',   NULL,   NULL  
       
    --为字段a1添加描述信息  
      EXECUTE   sp_addextendedproperty   N'MS_Description',   '姓名',   N'user',   N'dbo',   N'table',   N'表',   N'column',   N'a1'  
       
    --为字段a2添加描述信息  
      EXECUTE   sp_addextendedproperty   N'MS_Description',   '性别',   N'user',   N'dbo',   N'table',   N'表',   N'column',   N'a2'  
       
    --更新表中列a1的描述属性:  
      EXEC   sp_updateextendedproperty   'MS_Description','字段1','user',dbo,'table','表','column',a1  
       
    --删除表中列a1的描述属性:  
      EXEC   sp_dropextendedproperty   'MS_Description','user',dbo,'table','表','column',a1  
       
    --删除测试  
      drop   table   表
    
    3.批量更新表
       //批量更新表时,update一个表的列时,需要依赖另外的表,这种依赖可以是where条件子句,也可以要update的field的值依赖另外的表
       通常有两种做法
       1.使用存储过程
       2.在程序代码里逐条循环执行
    	这里给出一种更高效、简洁的做法,批量更新SQL ,一句SQL就可以替代麻烦的循环过程,有MS SQLServer、Oracle、DB2下的写法
    	--关键点:t4和t1是同一个table,primary key肯定也是同一个,
    	--并以它进行关联,这样在 select语句里即可引用到要update的表的fields 
    	UPDATE Table1 AS t1 
    	SET (Field1,Field2) = 
    	(SELECT Field21, Field22 
    	FROM Table2 t2 
        INNER JOIN Table3 t3 
        ON t3.Field31 = t2.Field23 
        INNER JOIN Table4 t4 
        ON t3.Field32 = t4.Filed41 
        WHERE t2.Field24 >= '' 
        AND t1.fId = t4.fId); 
    
    	----------------------------MS SQLServer --------------------------------------
    
    	UPDATE t1 
    	SET Field1 = Field21, Field2 = Field22 
    	FROM Table2 t2 
    			 INNER JOIN Table3 t3 
    				  ON t3.Field31 = t2.Field23 
    			 INNER JOIN Table4 t4 
    				  ON t3.Field32 = t4.Filed41 
    	WHERE ((t2.Field24 >= '') 
    					  AND t1.fId = t4.fId); 
    	----------------------------Oracle --------------------------------------------
    
    	UPDATE Table1 t1 
    	SET (Field1,Field2) = (SELECT Field21, Field22 
    						   FROM Table2 t2 
    								INNER JOIN Table3 t3 
    									 ON t3.Field31 = t2.Field23 
    								INNER JOIN Table4 t4 
    									 ON t3.Field32 = t4.Filed41 
    						   WHERE ((t2.Field24 >= '') 
    								AND t1.fId = t4.fId)) 
    	WHERE EXISTS (SELECT Field21, Field22 
    				  FROM Table2 t2 
    					   INNER JOIN Table3 t3 
    							ON t3.Field31 = t2.Field23 
    					   INNER JOIN Table4 t4 
    							ON t3.Field32 = t4.Filed41 
    				  WHERE ((t2.Field24 >= '') 
    								 AND t1.fId = t4.fId)); 
    	---------------------------------DB2 ------------------------------------------
    
    	UPDATE Table1 AS t1 
    	SET (Field1,Field2) = (SELECT Field21, Field22 
    						   FROM Table2 t2 
    								INNER JOIN Table3 t3 
    									 ON t3.Field31 = t2.Field23 
    								INNER JOIN Table4 t4 
    									 ON t3.Field32 = t4.Filed41 
    						   WHERE ((t2.Field24 >= '') 
    								 AND t1.fId = t4.fId)) 
    	WHERE EXISTS (SELECT Field21, Field22 
    				  FROM Table2 t2 
    					   INNER JOIN Table3 t3 
    							ON t3.Field31 = t2.Field23 
    					   INNER JOIN Table4 t4 
    							ON t3.Field32 = t4.Filed41 
    				  WHERE ((t2.Field24 >= '') 
    								 AND t1.fId = t4.fId));
    
    -------------------------------------------------------------------------------------------
    -------------------------------------------------------------------------------------------
     //批量删除表
     T-sql里有一个快速删除表里所有数据的方法: 
     Truncate Table [表名] 
    
    4.常用字符转换函数
    	一、字符转换函数
    	1、ASCII()
    	返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错。
    	2、CHAR()
    	将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII 码值,CHAR() 返回NULL 。
    	3、LOWER()和UPPER()
    	LOWER()将字符串全部转为小写;UPPER()将字符串全部转为大写。
    	4、STR()
    	把数值型数据转换为字符型数据。
    	STR ([,length[, ]])
    	length 指定返回的字符串的长度,decimal 指定返回的小数位数。如果没有指定长度,缺省的length 值为10, decimal 缺省值为0。
    	当length 或者decimal 为负值时,返回NULL;
    	当length 小于小数点左边(包括符号位)的位数时,返回length 个*;
    	先服从length ,再取decimal ;
    	当返回的字符串位数小于length ,左边补足空格。
    	
    	二、去空格函数
    	1、LTRIM() 把字符串头部的空格去掉。
    	2、RTRIM() 把字符串尾部的空格去掉。
    
    	三、取子串函数
    	1、left() 
    	LEFT ()
    	返回character_expression 左起 integer_expression 个字符。
    
    	2、RIGHT() 
    	RIGHT ()
    	返回character_expression 右起 integer_expression 个字符。
    
    	3、SUBSTRING()
    	SUBSTRING (, length)
    	返回从字符串左边第starting_ position 个字符起length个字符的部分。
    
    	已知: 字段A='F:\photo\Winter Leaves.jpg'   
    	要求:分段截取每段字符[字段A不能为TEXT类型,否则报错]
    	解决方法:
    	---截取字符串A的第一个\左边的字符串
    	select left(A,charindex('/',A)-1)
    	输出结果:F:
    
    	---截取\中间的字符串
    	select   left(stuff(A,1,charindex('/',A),''),charindex('/',stuff(A,1,charindex('/',A),''))-1)
    	输出结果:photo
    
    	---截取最后一个\后面的字符串
    	select   reverse(left(reverse(A),charindex('/',reverse(A))-1))
    	输出结果:Winter Leaves.jpg
    
    	---截取字符串A的首字幕
    	select   STUFF(A,1, 1, '')
    	输出结果::\photo\Winter Leaves.jpg
    
    	四、字符串比较函数
    	1、CHARINDEX()
    	返回字符串中某个指定的子串出现的开始位置。
    	CHARINDEX (<’substring_expression’>, )
    	其中substring _expression 是所要查找的字符表达式,expression 可为字符串也可为列名表达式。如果没有发现子串,则返回0 值。
    	此函数不能用于TEXT 和IMAGE 数据类型。
    	2、PATINDEX()
    	返回字符串中某个指定的子串出现的开始位置。
    	PATINDEX (<’%substring _expression%’>, )其中子串表达式前后必须有百分号“%”否则返回值为0。
    	与CHARINDEX 函数不同的是,PATINDEX函数的子串中可以使用通配符,且此函数可用于CHAR、 VARCHAR 和TEXT 数据类型。
    
    	五、字符串操作函数
    	1、QUOTENAME()
    	返回被特定字符括起来的字符串。
    	QUOTENAME (<’character_expression’>[, quote_ character]) 其中quote_ character 标明括字符串所用的字符,缺省值为“[]”。
    	
    	2、REPLICATE()
    	返回一个重复character_expression 指定次数的字符串。
    	REPLICATE (character_expression integer_expression) 如果integer_expression 值为负值,则返回NULL 。
    
    	3、REVERSE()
    	将指定的字符串的字符排列顺序颠倒。
    	REVERSE () 其中character_expression 可以是字符串、常数或一个列的值。
    
    	4、REPLACE()
    	返回被替换了指定子串的字符串。
    	REPLACE () 用string_expression3 替换在string_expression1 中的子串string_expression2。
    
    	4、SPACE()
    	返回一个有指定长度的空白字符串。
    	SPACE () 如果integer_expression 值为负值,则返回NULL 。
    
    	5、STUFF()
    	用另一子串替换字符串指定位置、长度的子串。
    	STUFF ()
    	如果起始位置为负或长度值为负,或者起始位置大于character_expression1 的长度,则返回NULL 值。
    	如果length 长度大于character_expression1 中 start_ position 以右的长度,则character_expression1 只保留首字符。
    	
    	六、数据类型转换函数
    	1、CAST()
    	CAST ( AS [ length ])
    
    	2、CONVERT()
    	CONVERT ([ length ],  [, style])
    
    	1)data_type为SQL Server系统定义的数据类型,用户自定义的数据类型不能在此使用。
    	2)length用于指定数据的长度,缺省值为30。
    	3)把CHAR或VARCHAR类型转换为诸如INT或SAMLLINT这样的INTEGER类型、结果必须是带正号或负号的数值。
    	4)TEXT类型到CHAR或VARCHAR类型转换最多为8000个字符,即CHAR或VARCHAR数据类型是最大长度。
    	5)IMAGE类型存储的数据转换到BINARY或VARBINARY类型,最多为8000个字符。
    	6)把整数值转换为MONEY或SMALLMONEY类型,按定义的国家的货币单位来处理,如人民币、美元、英镑等。
    	7)BIT类型的转换把非零值转换为1,并仍以BIT类型存储。
    	8)试图转换到不同长度的数据类型,会截短转换值并在转换值后显示“+”,以标识发生了这种截断。
    	9)用CONVERT()函数的style 选项能以不同的格式显示日期和时间。style 是将DATATIME 和SMALLDATETIME 数据转换为字符串时所选用的由SQL Server 系统提供的转换样式编号,不同的样式编号有不同的输出格式。
    	
    	七、日期函数
    	1、day(date_expression) 
    	返回date_expression中的日期值
    
    	2、month(date_expression)
    	返回date_expression中的月份值
    
    	3、year(date_expression)
    	返回date_expression中的年份值
    
    	4、DATEADD()
    	DATEADD ()
    	返回指定日期date 加上指定的额外日期间隔number 产生的新日期。
    	
    	5、DATEDIFF()
    	DATEDIFF ()
    	返回两个指定日期在datepart 方面的不同之处,即date2 超过date1的差距值,其结果值是一个带有正负号的整数值。
    
    	6、DATENAME()
    	DATENAME ()
    	以字符串的形式返回日期的指定部分此部分。由datepart 来指定。
    
    	7、DATEPART()
    	DATEPART ()
    	以整数值的形式返回日期的指定部分。此部分由datepart 来指定。
    	DATEPART (dd, date) 等同于DAY (date)
    	DATEPART (mm, date) 等同于MONTH (date)
    	DATEPART (yy, date) 等同于YEAR (date)
    
    	8、GETDATE()
    	以DATETIME 的缺省格式返回系统当前的日期和时间
    
    5.case when...then
    
    6.不同数据库的两张表,将一张表中相应字段的数据对应填充到另一张表
    
    7.往一张空表添加数据
       法一:select * into b from a where 1<>1
      法二:select top 0 * into b from a
    
    二、asp.net
    1.asp.net页面传值方式,每种方式的生命周期
    ViewState,Cookie,Session,Application,Transfer,Response.Redirect?id=,表单
    
    2.数据源绑定控件,每种控件的使用情况,效率高低
    GridView,DataGrid,DataList,Repeater
    
    3.对DataTable重构,排序
            private DataTable SortTable(DataTable dt, string[] pids)
            {
                DataTable dt0 = dt.Clone(); //复制原表结构
                for (int i = 0; i < pids.Length; i++)
                {
                    if (pids[i] != string.Empty)
                    {
                        DataRow[] drs = dt.Select("pg_bscode =" + pids[i]);
                        if (drs.Length > 0)
                        {
                            foreach (DataRow dr in drs)
                            {
                                dt0.ImportRow(dr); //导入行
                            }
                        }
                    }
                }
                return dt0;
    		}
    
    4.翻页返回,跳到上一级操作的页面;
      
      /*GridView删除一条数据仍跳转到相应页面
      id = 1 可以重新跳到当前页,而且不是每次都跳到首页
      */
      删除
    
    5.iframe框架中的任何一级子页面,点击返回跳转到第一层主页面
    
    
    6.打印分页,排版
    思路,先求条数count,然后求页数page,规定每页条数为pagecount
    for(int p = 1;p <= page; p++)
    {
        if(p == page)
        {
    		//不翻页 
        }
    	else
    	{
    		//翻页 样式中添加page-break-after:aways
    	}
    
    	#region table_head
    	//表头
    	#endregion 
    
    	#region table_body
    	//内容页 
    	int i =0;
    	for(int j = 0; j< pagecount ; j++)
    	{
    		//第一页从0~pagecount
    		//第二页从j(即pagecount+1)~(page-1)*pagecount;
    		i = (page-1)*pagecount + j;
    	}
    	#endregion
        
    	#region table_bottom
    	#endregion
    	//当i == page 可能有多出的条数(比如每页显示10条,有22条数据,第三页就有8条数据为空)
    }
    
    7.StringBuilder 使用
      StringBuilder 效率比较高,特别是较复杂的SQL语句时候,用 Append(""+SQL语句+"");可以大大提高效率
    
    三、JS
    1.在textbox框内输入数据,类似百度模糊查询
    
    	
    
    
    2.Repeater中每行select值的绑定【受理审查、暂缓项目处理】,全选
    	window.onload =function(){
            var el = document.getElementById("tb").getElementsByTagName("select");    
            var hid = document.getElementById("tb").getElementsByTagName("input");
            var s="",name="",user="";
                
            for(var i=1;i
    		
    		  
    		  
    		  
    		  
    		  
    		  
    		
    
    		var xmlDoc;
            //载入XML文档
            function loadxmlDocument(docName){   
                xmlDoc = new ActiveXObject("Microsoft.XMLDOM");   
                xmlDoc.async = false;   
                xmlDoc.validateOnParse = false;   
                xmlDoc.load(docName);   
                if(xmlDoc.parseError.errorCode != 0){   
                    alert(showError(xmlDoc));   
                    return(false);   
                }   
                
                return(xmlDoc);   
            } 
          
            //调用数据
            function startload(conid){ 
                var option,id,jobname,fid;
                xmlDoc = loadxmlDocument("Data.xml");
                
                if(xmlDoc == null){ 
                    alert('您的浏览器不支持xml文件读取!请使用IE版本'); 
                } 
                else{ 
                    clearList(conid);
                    var DeptXML = xmlDoc.getElementsByTagName("job");
                    
                    for (var i = 0 ; i < DeptXML.length ; i ++ ){ 
                        id = DeptXML[i].attributes[0].nodeValue;
                        jobname = DeptXML[i].attributes[1].nodeValue;
                        option = new Option(jobname,id);
                        document.getElementById(conid).add(option);
                    } 
                } 
            } 
    
    		function loadxmlval(){
    		    if(document.getElementById("asd").value=="true"){ 
    		        for (var i = 1; i < 11; i++) {
    		            if (document.getElementById("usel_" + i) == null){
    		                break; 
    		            }
    		            
    		            var temp = document.getElementById("usel_" + i).id
    		            startload(temp);
    		        }
    		    
    		        startload(document.getElementById("useall").id);
    		        startload(document.getElementById("ddlAcpt_UserCode").id)
    		        document.getElementById("asd").value="false";
    		    }
    		}
    
    
    4.工作台界面JS
    待办事宜  
     
     
     
    
    序号任务名称任务量办理
    1合同核定4选择
    var appendurl = new Array(); function ReturnUrl(tagName){ var surl =""; switch (tagName){ case "受理审查": srul = "FreeTaxManage/checkreceive/ContractChkEditList.aspx"; break; case "主任审定": srul= "FreeTaxManage/managercheck/CCKEditList.aspx"; break; case "合同信息录入": srul = "FreeTaxManage/entercontract/CInputEditList.aspx"; break; case "合同核定": srul = "FreeTaxManage/checkcontract/CChkEditList.aspx"; break; case "会议审理": srul = "FreeTaxManage/expertcheck/ExpertRCEditList.aspx"; break; case "核定证明打印": srul = "FreeTaxManage/printcontract/AcptBusinessEditList.aspx"; break; case "多次办理": srul = "FreeTaxManage/morecheck/CChkEditList.aspx"; break; case "多次办理审定": srul = "FreeTaxManage/moremacheck/CCKEditList.aspx"; break; } return srul; } function selonclick(i,bgid){ var tb = document.getElementById(bgid.id); var tagName = tb.rows[i].cells[1].innerText; var usercode = '<%= Session["usercode"].ToString() %>'; appendurl = FTMIS.Web.welcome.GetPG_BsCodes(tagName,usercode).value; window.parent.document.getElementById('details').src = '' + ReturnUrl(tagName) + ''+'?ids='+bgid.id+''; } 5.多联打印 ____________________________________________________ | 操作 | |——————————————————————————————————————————————————| | checkbox口 一联 checkbox口 二联 checkbox口 三联 | |——————————————————————————————————————————————————| (勾选就打印,可以勾选一联,也可以勾选多联) function getvalue(obj,obt) { var total=""; var cishunum= document.getElementById("sel_"+obj).value; var temp=document.getElementById("yl_"+obj+""); if(temp.checked){ total+="1"; } temp=document.getElementById("el_"+obj+""); if(temp.checked){ total+="2";} temp=document.getElementById("sl_"+obj+""); if(temp.checked){ total+="3";} var page ='<%=pagea %>'; var wh ='<%=wh %>'; var ids=('<%=ids %>' =="" ?"":"&ids="+'<%=ids %>'); var page1 ='<%=page1 %>'; var wh1 ='<%=wh1 %>'; var id = '<%=ida %>'; window.open ("ContractFile.aspx?id=" + id + "&page=" + page + "&wh=" + wh+ ids +"&page1=" + page1 + "&wh1=" + wh1 + "&id1=" + obt + "&val=" + total+"&num="+cishunum, "newwindow", "width=800px,height=600px, toolbar =yes, menubar=yes, scrollbars=yes, resizable=yes, location=no, status=no") } 6.年输入完后光标自动跳转到月 function Nextblur(){ var len = //这里输入文本框的长度,譬如在第一个文本框内输入两个字节就跳转到下一个文本框 var txt1 = document.getElementById('txt1'); var txt2 = document.getElementById('txt2'); if(txt1.length== len){ txt2.onblur(); } } 7.用了微软的Ajax控件ScriptManager后,如何做到弹出消息框页面不刷新 //用了AJAX控件后,弹出消息框 public void AjaxClientMsg(string alert) { ScriptManager.RegisterStartupScript(UpdatePanel1, GetType(), "", "alert('" + alert + "');", true); } 8.select选中一个值A 点击检索按钮后,如何做到select选中的值仍为A。前提是(select是自动绑定,不是手写的固定值) //解决方法=>这里添加一个hidden(隐藏域), 选中时候给hidden的value赋值,检索后 再给select赋值 window.onload = function(){ var ddluser = document.getElementById("Hidden1").value; var dduser = document.getElementById("ddlAcpt_UserCode"); dduser.value = ddluser; } 四、封装的方法 1.去掉小数点末尾的0 public static string GetSimpleMoney(string MoneyString) { string str = MoneyString; if (str.IndexOf(".") != -1) { str = MoneyString.Trim().TrimEnd(new char[] { '0' }).TrimEnd(new char[] { '.' }); } return str; } 2.人民币与数字转换 /// /// 转换人民币大小金额 /// /// 金额 /// 返回大写形式 public string getdx(string str) { if (str == "") { str = "0"; } decimal num = Convert.ToDecimal(str) * 10000; string str1 = "零壹贰叁肆伍陆柒捌玖"; //0-9所对应的汉字 string str2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"; //数字位所对应的汉字 string str3 = ""; //从原num值中取出的值 string str4 = ""; //数字的字符串形式 string str5 = ""; //人民币大写金额形式 int i; //循环变量 int j; //num的值乘以100的字符串长度 string ch1 = ""; //数字的汉语读法 string ch2 = ""; //数字位的汉字读法 int nzero = 0; //用来计算连续的零值是几个 int temp; //从原num值中取出的值 num = Math.Round(Math.Abs(num), 2); //将num取绝对值并四舍五入取2位小数 str4 = ((long)(num * 100)).ToString(); //将num乘100并转换成字符串形式 j = str4.Length; //找出最高位 if (j > 15) { return "溢出"; } str2 = str2.Substring(15 - j); //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分 //循环取出每一位需要转换的值 for (i = 0; i < j; i++) { str3 = str4.Substring(i, 1); //取出需转换的某一位的值 temp = Convert.ToInt32(str3); //转换为数字 if (i != (j - 3) && i != (j - 7) && i != (j - 11) && i != (j - 15)) { //当所取位数不为元、万、亿、万亿上的数字时 if (str3 == "0") { ch1 = ""; ch2 = ""; nzero = nzero + 1; } else { if (str3 != "0" && nzero != 0) { ch1 = "零" + str1.Substring(temp * 1, 1); ch2 = str2.Substring(i, 1); nzero = 0; } else { ch1 = str1.Substring(temp * 1, 1); ch2 = str2.Substring(i, 1); nzero = 0; } } } else { //该位是万亿,亿,万,元位等关键位 if (str3 != "0" && nzero != 0) { ch1 = "零" + str1.Substring(temp * 1, 1); ch2 = str2.Substring(i, 1); nzero = 0; } else { if (str3 != "0" && nzero == 0) { ch1 = str1.Substring(temp * 1, 1); ch2 = str2.Substring(i, 1); nzero = 0; } else { if (str3 == "0" && nzero >= 3) { ch1 = ""; ch2 = ""; nzero = nzero + 1; } else { if (j >= 11) { ch1 = ""; nzero = nzero + 1; } else { ch1 = ""; ch2 = str2.Substring(i, 1); nzero = nzero + 1; } } } } } if (i == (j - 11) || i == (j - 3)) { //如果该位是亿位或元位,则必须写上 ch2 = str2.Substring(i, 1); } str5 = str5 + ch1 + ch2; if (i == j - 1 && str3 == "0") { //最后一位(分)为0时,加上“整” //str5 = str5 + '整'; } } if (num == 0) { str5 = ""; } return str5 + "整"; } 3.GridView 单击行变色 if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { e.Item.Attributes.Add("onmouseover", "this.style.backgroundColor='#D7E1F2'"); e.Item.Attributes.Add("onmouseout", "this.style.backgroundColor='White'"); e.Item.Attributes["style"] = "cursor:pointer"; /*color:Bisque;#D7E1F2,#CEEDFA e.Item.Style["cursor"] = "pointer"; e.Item.Attributes.Add("onclick", "alert(\"This row's Product Name: " + e.Item.Cells[3].Text + "\");");*/ } 4.GridView 数据为空时候,显示"您所查询的数据为空" /// /// GridView绑定显示 /// /// GridView的ID /// 查询结果集 /// 标识列 public void BindMethod(GridView gv, DataSet ds, string tableColumnName) { int n1 = ds.Tables[0].Rows.Count; if (n1 == 0) { //DataSet ds = help.SelectedCourse(Session["txtID"].ToString()); ds.Tables[0].Rows.Add(ds.Tables[0].NewRow()); gv.DataSource = ds; gv.DataBind(); int columnCount = ds.Tables[0].Columns.Count; gv.Rows[0].Cells.Clear(); gv.Rows[0].Cells.Add(new TableCell()); gv.Rows[0].Cells[0].ColumnSpan = columnCount; gv.Rows[0].Cells[0].Text = "您所查询的数据为空"; gv.Rows[0].Cells[0].Style.Add("text-align", "center"); } else { gv.DataKeyNames = new string[] { tableColumnName }; gv.DataSource = ds; gv.DataBind(); } } 5.AspNetPage分页控件封装 public void BindMethod(Repeater rp, DataTable dt, AspNetPager aspPage, HtmlGenericControl lb) { PagedDataSource pds = new PagedDataSource(); pds.AllowPaging = true; aspPage.RecordCount = dt.Rows.Count; pds.PageSize = aspPage.PageSize; pds.CurrentPageIndex = aspPage.CurrentPageIndex - 1; pds.DataSource = dt.DefaultView; rp.DataSource = pds; rp.DataBind(); string count = ""; if (aspPage.RecordCount % 10 == 0) { count = (aspPage.RecordCount / 10).ToString(); } else { count = (aspPage.RecordCount / 10 + 1).ToString(); } lb.InnerHtml = "共 " + aspPage.RecordCount + " 项,当前为 " + aspPage.CurrentPageIndex + " 页,总共 " + count + " 页"; } 6.GridView 中的 CheckBox 全选 public void CheckAllCbox(GridView gv,string cbxId,bool b) { for(int i = 0 ;i /// 用户登录 /// /// 用户名 /// 登陆密码 /// public static bool UserLogin(string username, string pass, string dltflg) { string where = "USERNAME='" + username + "' and USERPASSWORD='" + PasswordToMD5(pass, 16) + "' AND DLTFLG='" + dltflg + "'"; System.Collections.Generic.IList list = new FTMIS.BLL.T_USER().GetModelList(where); if (list.Count > 0) { System.Web.HttpContext.Current.Session["UserInfo"] = list[0]; return true; } return false; } /// /// MD5加密 /// /// 要加密的字符串 /// 加密位数 /// public static string PasswordToMD5(string str, int code) { if (code == 16) //16位MD5加密(取32位加密的9~25字符) { return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower().Substring(8, 16); } else//32位加密 { return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower(); } } /// /// 登录验证 /// /// 用户名 /// 密码 /// public bool CheckLogin(string loginName, string loginPassword) { SqlParameter[] parameters = { new SqlParameter("@loginname", SqlDbType.VarChar,8), new SqlParameter("@loginpassword", SqlDbType.VarChar,16),}; parameters[0].Value = loginName; parameters[1].Value = PasswordToMD5(loginPassword, 16); string password = PasswordToMD5(loginPassword, 16); string sqlstr = "SELECT UID FROM T_USER WHERE USERNAME=@loginname AND USERPASSWORD= @loginpassword AND DLTFLG='0'"; bool flag = DbHelperSQL.Exists(sqlstr, parameters); return flag; } 12.HashTable,Dictionary使用 HashTable ht = new HashTable(); ht.add(key,value); foreach(键值对 sht in ht) { object key = sht.key; object value = sht.value; } Dictionary dty = new Dictionary; dty.add(object,object); foreach(键值对 sdty in dty) { object key = sdty.key; object value = dty.value; } 键值对:DictionaryEntry;KeyValuePair 每个元素是一个存储在 DictionaryEntry 对象中的键/值对。键不能为空引用(Visual Basic 中为 Nothing),但值可以。 注:所谓的DictionaryEntry 结构,就是定义可设置或检索的字典键值对,有一个Key属性,一个Value属性,分别代表键和值 13.替换字符串中间的空格 //str:要处理的字符串,sptr:要替换的字符串;sptr1:要替换成的字符串 public string ReplaceAll(string str, string sptr, string sptr1) { while (str.IndexOf(sptr) >= 0) { str = str.Replace(sptr, sptr1); } return str; } IE6:url传中文时候用Request获取得到的是乱码=>解决方法:加密再解密 IE6:弹出的div层无法隐藏select=>解决方法:用iframe 五、CSS 禁止换行:nowrap; table中数字换行:white-space;word-wrap/word-break; 箭头:-> 分页:.PageNext{page-break-after:always;} 垂直滚动条:.html{overflow-x:hidden;overflow-y:auto} 六、页面验证 1.正则表达式 金额必须为正数,小数点后面4位,[禁止字母,符号,负数],长度限制 七、新老数据库整合 八、给客户上版本必须具备的步骤 数据库备份脚本 declare @DBName varchar(200) set @DBName='ReportServer$SQL2005' --截断日志 DUMP TRANSACTION @DBName WITH NO_LOG --收缩数据库 DBCC SHRINKDATABASE (@DBName,TRUNCATEONLY) --备份数据库 USE master declare @Version varchar(20) declare @DateAppend varchar(20) declare @BasePath varchar(200) declare @BakPath varchar(200) --设定备份的基本目录 set @BasePath='f:/tmp' --设定版本,每个版本的备份放在不同的地方 set @Version='V6.1' --设定备份的完整路径 set @BakPath=@BasePath+'/'+ @Version +'/Db.Bak' USE master --创建备份设备,如果存在则无需建立 if exists(select * from sysdevices where name='CTOS_DB_Bak') begin EXEC sp_dropdevice 'CTOS_DB_Bak' declare @tmpcmd varchar(100) set @tmpcmd='del ' + @BakPath EXEC sp_configure 'show advanced options',1 RECONFIGURE EXEC sp_configure 'xp_cmdshell', 1 RECONFIGURE exec master..xp_cmdshell @tmpcmd EXEC sp_configure 'show advanced options', 1 RECONFIGURE EXEC sp_configure 'xp_cmdshell', 0 RECONFIGURE end EXEC sp_addumpdevice 'disk','CTOS_DB_Bak',@BakPath --备份数据库 BACKUP DATABASE @DBName TO CTOS_DB_Bak 九、代码规范 1.后台代码: 实体类初始化
    全局变量声明:isNull(首字母小写,第二个单词字母大写)
    public void Page_Load() { //变量放在一起,每个变量单独为一行;

    for,foreach,switch,Method(自定义),white(){}等等; } 2.前台js function Method(){ var 变量; if(条件){ } else{ } } 方法与方法之间要换一行 3.排版快捷键:CTRL+A,K,F; 代码折叠: CTRL+M+M(单个方法,事件折叠);CTRL+M+L+M+L(全部代码折叠) 4.如何写注释 更改记录 //update by youname 20110905 ------start------// code //update by youname 20110905 -------end-------// 添加记录 //add by youname 20110905 ------start------// code //add by youname 20110905 -------end-------// 折叠模块 #region 说明 #endregion
  • 相关阅读:
    前端面试题及答案整理(一)
    关于提高网站性能的几点建议(二)
    关于提高网站性能的几点建议(一)
    基于ArcGIS JS API的在线专题地图实现
    关于婚姻的本质(转)
    14亿人的战争:中国人用了30年望见计算力的珠峰(转载)
    高效能人士的七个习惯--读书笔记
    乔布斯在斯坦福大学的演讲
    疫情加速医疗信息化行业景气上升,医疗信息化新黄金时代即将开启(转自公众号:先知研报)
    oracleXEUniv最大连接数修改
  • 原文地址:https://www.cnblogs.com/lhws/p/2171289.html
Copyright © 2020-2023  润新知