向五一啦。。。
今天上午参加了english training,哎,That 's very boring...Maybe My english is pretty poor!
昨天忘记了一个asp.net 上一个很重要的事件:
If Not Me.IsPostBack Then
'Me.txtEventID.Visible = False
Me.rdEdit.Checked = True
Me.rdNew.Checked = False
End If
End Sub
Page_Load顾名思义了,就是asp页面加载时, 可以调用这个Load事件。其作用就是可以对asp页面一些组件设置状态。如上述代码就对radio进行默认的checked。那么
If Not Me.IsPostBack Then 是干什么用的呢?它就是判断是否每次页面刷新加载时,都要对一些组件设置状态。通俗的讲就是只在页面第一次加载时进行设置。如果第2次,第3次...n次refresh页面就不会对一些组件设置状态。注意是refresh刷新。
今天要写一些复杂的sql server存储过程啦,说真滴搞java开发的,存储过程真的写的很less。先看看语法吧:
@EventId VARCHAR(14)
AS
BEGIN
SET NOCOUNT ON;
END
Simple。注意@EventId Varchar(14)相当于vb.net中function或sub里ByVal, 传进来的参数。当然也可以输出数据如:@ReturnVal int output
SET NOCOUNT ON; 的含义:(摘抄)
使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息
语法:SET NOCOUNT { ON | OFF }
默认情况下为 ON (sql server 2008)
当 SET NOCOUNT 为 ON 时,不返回计数(表示受Transact-SQL 语句影响的行数)。
当 SET NOCOUNT 为 OFF 时,返回计数。
即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。
当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft® SQL Server™ 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)结束时将不会在查询结果中显示"nn rows affected"。
如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。
献上写的存储过程的代码:
-- Add the parameters for the stored procedure here
@EventId VARCHAR(14),
@EventDateFrom DATETIME,
@EventDateTo DATETIME,
@Where VARCHAR(500)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET ANSI_WARNINGS OFF;
SET NOCOUNT ON ;
IF @Where IS NOT NULL
BEGIN
DECLARE @sql VARCHAR(1500)
DECLARE @timesheetId INT
DECLARE @dayInt INT
SET @dayInt = ( SELECT DATEDIFF(DAY, @EventDateFrom, @EventDateTo)
)
DECLARE @i INT
SET @i = 0
WHILE @i <= @dayInt
BEGIN
set @sql=''
SET @timesheetId=(SELECT Id FROM rsvp.EventTimesheet WHERE EventId=@EventId AND EventDate=DATEADD(DAY,@i,@EventDateFrom))
SELECT @sql='INSERT INTO rsvp.EventOption(TimeSheetId ,OptionNo ,CateDesc ,SubCateDesc ,
IsShowForEvent ,
CateSeqNo ,
SubCateSeqNo
) SELECT ' +CAST(@timesheetId AS VARCHAR(11))+',et.OptionNo,et.CateDesc,et.SubCateDesc,et.IsShowForEvent,et.CateSeqNo,et.SubCateSeqNo
FROM rsvp.EventOptionTemplate As et Where '+@Where
EXEC(@sql)
SET @i = @i + 1
END
END
END
还是蛮有趣的,存储过程中,一些函数的使用,后面必须跟着Begin。。End。如:
IF @i>0
BEGIN
-- do something for if
END
这样就很明确IF判断到那里结束,还有循环语法,貌似只有while
while @i<1
BEGIN
--do something for each
END
在就是如果想定义一个变量要使用DECLARE @name varchar(14) ,语法结构就是DECLARE @variable type。
注意:
INSERT INTO table_bak(.....) SELECT ... FROM table 是insert 数据到数据库已经存在的table表里。而SELECT 。。。INTO table_bak FROM table 是先要去创建一个表,在insert数据到该表。
同时如果想使用 INSERT INTO table_bak(.....) SELECT ... FROM table时,要设置SET ANSI_WARNINGS OFF;
persist