一、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 = '';
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 ='';
var wh ='';
var ids=('' =="" ?"":"&ids="+'');
var page1 ='';
var wh1 ='';
var id = '';
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