项目相关技术总结

最近做一个电子签核程序,里面涉及到方方面面,特做一个小结.
此文会不段更新中......

一.数据库方面(sql server)
这次数据设计用了Sysbase公司的PowerDesigner12,感觉很爽,基本上来说,数据库设计好了,程序也就好做了,不过在这之前如果能画好流程图,对数据库设计帮助也很大.考虑到时间各方面因素,这次没做那么详细.
有几个小东西,放在这里,防止以后忘记:

1.tools-->modeloptions-->naming convention-->display,选择NAME
2.双击表,出现column列表,双击要设置的列的左边的灰色框,应该会弹出新的窗口,然后在新窗口上选择standard   checks  ,里面有default的.
3.打开PDM后,点菜单Database->Generate Database
在随后出现的界面里面有个Generation选项,选择ODBC Generation,就可以直接创建数据库. 

SQL 字符串分割函数
create function [dbo].[f_split](@SourceSql varchar(8000),@StrSeprate varchar(10))
returns @temp table(a varchar(100))
as 
begin
    
declare @i int
    
set @SourceSql=rtrim(ltrim(@SourceSql))
    
set @i=charindex(@StrSeprate,@SourceSql)
    
while @i>=1
    
begin
        
insert @temp values(left(@SourceSql,@i-1))
        
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
        
set @i=charindex(@StrSeprate,@SourceSql)
    
end
    
if @SourceSql<>'\'
       
insert @temp values(@SourceSql)
    
return 
end

SQL根据数组标识添加多条记录的例子
DECLARE @UserID varchar(20)
DECLARE @RoleID varchar(2000)
SET @UserID='1'
SET @RoleID='445,33,43554,55,556,'
DELETE FROM userole WHERE userid=@UserID
SET @RoleID=stuff(@RoleID,len(@RoleID),1,'')

set @RoleID=@RoleID+','
DECLARE @strSQL nvarchar(2000)
while charindex(',',@RoleID)>0
begin

select @strSQL=left(@RoleID,charindex(',',@RoleID)-1)

print('INSERT INTO userole(userid,roleid)VALUES('''+@UserID+''','''+@strSQL+''')')
set @RoleID=stuff(@RoleID,1,charindex(',',@RoleID),'')

end


返回主键ID:return @@identity,时间转换函数:CONVERT(varchar(10),GETDATE(),112)+CAST(datepart(ms,getdate()) as varchar(20))
语法:
Syntax for CAST:
CAST ( expression AS data_type [ (length ) ])
Syntax for CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

不带世纪数位 (yy) (1) 带世纪数位 (yyyy) 标准 输入/输出 (3)

-

0 或 100 (1, 2)

默认设置

mon dd yyyy hh:miAM(或 PM)

1

101

美国

mm/dd/yyyy

2

102

ANSI

yy.mm.dd

3

103

英国/法国

dd/mm/yy

4

104

德国

dd.mm.yy

5

105

意大利

dd-mm-yy

6

106 (1)

-

dd mon yy

7

107 (1)

-

mon dd, yy

8

108

-

hh:mm:ss

-

9 或 109 (1, 2)

默认设置 + 毫秒

mon dd yyyy hh:mi:ss:mmmAM(或 PM)

10

110

美国

mm-dd-yy

11

111

日本

yy/mm/dd

12

112

ISO

yymmdd

-

13 或 113 (1, 2)

欧洲默认设置 + 毫秒

dd mon yyyy hh:mm:ss:mmm(24h)

14

114

-

hh:mi:ss:mmm(24h)

-

20 或 120 (2)

ODBC 规范

yyyy-mm-dd hh:mi:ss(24h)

-

21 或 121 (2)

ODBC 规范(带毫秒)

yyyy-mm-dd hh:mi:ss.mmm(24h)

-

126 (4)

ISO8601

yyyy-mm-ddThh:mm:ss.mmm(无空格)

127(6)

带时区 Z 的 ISO8601。

yyyy-mm-ddThh:mm:ss.mmmZ

(无空格)

-

130 (1, 2)

回历 (5)

dd mon yyyy hh:mi:ss:mmmAM

-

131 (2)

回历 (5)

dd/mm/yy hh:mi:ss:mmmAM


Procedure:

set nocount on
create table #tmp(id int identity(1,1),ad_time datetime default getdate())
set nocount off

SQL Server 2005 的版本对应的版本号
SELECT SERVERPROPERTY('ProductVersion') 
 
9.00.1399
 SQL Server 2005(初始版本)

9.00.2047
 SQL Server 2005 SP1

9.00.3042
 SQL Server 2005 SP2
----------------------------------------------------------------------------------------
更改标识值:
修改为从0开始
DBCC   CHECKIDENT   (table,   RESEED,   0)  

查看
DBCC CHECKIDENT (users, NORESEED)
----------------------------------------------------------------------------------------
CASE用法:
CASE input_expression  WHEN when_expression THEN result_expression   [...n ][ELSE else_result_expression ] END

一个TRANSACTION

/*
Author:Jin
Time:2007/03/01
Note:个人基本信息修改
*/

ALTER PROCEDURE [dbo].[SP_ModifyUserMsg]
    (
    
@strNewPassWord nvarchar(100),
    
@strNewPassWord2 nvarchar(100),
    
@msgerror nvarchar(100) OUTPUT)
AS
declare @errid int
SET NOCOUNT ON
BEGIN TRANSACTION

if(@strblchge=1)
    
if (@strNewPassWord<>@strNewPassWord2)
    
begin
        
SELECT @msgerror='两次新密码输入不一致',@errid=99
        
GOTO Error_Handle
    
end

SET NOCOUNT OFF
COMMIT TRANSACTION
RETURN(0
     
Error_Handle:
    
SET NOCOUNT OFF
    
ROLLBACK TRANSACTION    
    
RETURN(@errid)



二.程序方面(c#)
根据PDM文件,直接开始程序制作.如果做好类图就更好了,同上,各方面因素没做那么详细.

posted on 2007-03-08 11:01  ★金★  阅读(324)  评论(0编辑  收藏  举报

导航